Hallo zusammen,
ich trau mich schon gar nicht nach meinem letzten Eintrag hier in Fortgeschrittene reinzuschreiben ;) Aber da ich mich mit OpenOffice beschäftigen (musste), möchte ich eine Lösung präsentieren, weil ich etwas vergleichbares hier nicht gefunden habe. Quasi als Danke schön, weil ihr mir bisher auch immer gut geholfen habt
So kann man beispielsweise mittels VB2005 auf Calc von OpenOffice zugreifen:
Dim oSM 'Hauptobjekt fuer den Zugriff auf OpenOffice
' von VB.Net aus (SM: ServiceManager)
Dim oDesk, oDoc, oSheet As Object 'Objekte von der OpenOffice-Schnittstelle (
' API)
prozess1 = Process.GetProcesses() 'Alle Prozesse VOR dem Erstellen
' der Calc-Mappe
Try
oSM = CreateObject("com.sun.star.ServiceManager") 'OpenOffice
' instanziieren: Zwingend notwenig fuer die Kommunikation von VB.Net mit der
' OpenOffice API
oDesk = oSM.createInstance("com.sun.star.frame.Desktop") 'Erstelle den
' ersten & wichtigsten Dienst
Catch
Exit Sub
End Try
prozess2 = Process.GetProcesses() 'Alle Prozesse NACH dem Erstellen
' der Calc-Mappe, inklusive der Prozess-ID der Calc-Mappe
'Um Calc im Hintergrund zu halten
Dim ladeZustand(0)
ladeZustand(0) = oSM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
ladeZustand(0).Name = "Hidden"
ladeZustand(0).Value = True
'Erstelle ein neues Calc-Tabellendokument (Wenn man den Writer oeffnen moechte,
' macht man dies mit: "private:factory/swriter"
oDoc = oDesk.loadComponentFromURL("private:factory/scalc", "_blank", 0, _
ladeZustand)
oSheet = oDoc.getSheets().getByIndex(0) 'Bezugspunkt: 1.Blatt der Mappe
'Setze Spalte (0) Breite
oSheet.getColumns().getByIndex(0).Width = 2500 'Spaltebreite: 2,5 cm
oSheet.getColumns().getByIndex(1).Width = 2500
oSheet.getColumns().getByIndex(2).Width = 6000 '6 cm
oSheet.getCellRangeByName("A1:B1").NumberFormat = 100 'als Text
' formatiert
oSheet.getCellRangeByName("A1:B1").Merge(True) 'Zellen
' verschmelzen
oSheet.getCellRangeByName("A1:B1").HoriJustify = 3 _
'Ausrichtung Zelle rechts
oSheet.getCellRangeByName("A1:B2").CellBackColor = RGB(255, 153, 153) _
'Zellenfarbe babyblau (Hex #9999FF)
oSheet.getCellRangeByName("A1").String = "Allgemeine Informationen:" 'Fuer
' Strings
oSheet.getCellRangeByName("A1").CharWeight = 150 'Fett
oSheet.getCellByPosition(1,0,1,1).NumberFormat = 2 'als Zahl
' formatiert, getCellByPosition ist eine weitere Methode zu getCellRangeByName
oSheet.getCellRangeByName("A2:B2").Merge(True)
oSheet.getCellRangeByName("A1:B1").HoriJustify = 2 _
'Ausrichtung Zelle mittig
oSheet.getCellRangeByName("A2:B2").CellBackColor = RGB(0, 0, 0) _
'Hintergrundfarbe: schwarz
oSheet.getCellRangeByName("A2:B2").CharColor = RGB(0, 255, 255) _
'Schriftfarbe: gelb
oSheet.getCellRangeByName("A2").Value = 12345 'Fuer Zahlen
[...]
'Datei über Speichern-Dialog abspeichern.
Dim save As New SaveFileDialog
Dim dateiname_split() As String
save.Filter = ("Calc-Datei (*.ods)|*.ods")
save.FilterIndex = 1
save.RestoreDirectory = True
save.Title = ("Datei speichern unter:")
dateiname_split = dateiname.Split(".") 'mein
' Dateiname, das ich mit Split in mehrere Teile unterteile
'Durch diese Vorgehensweise bekomme ich den Pfad und kann meine Datei mit
' demselben Namen abspeichern,
'wie ich die Datei mit demselben Namen geoeffnet habe.
For n As Byte = 0 To dateiname_split.Length - 1
If dateiname_split(n + 1).ToLower.Contains("txt") Then
Exit For
Else
dateiname_split(0) = dateiname_split(0) & dateiname_split(n + 1)
End If
Next
save.FileName = dateiname_split(0)
save.OverwritePrompt = True
Me.BringToFront()
'Zeigt den Datei-Dialog an
If save.ShowDialog(Me) = DialogResult.OK Then
Try
save.FileName = Replace(save.FileName, "\", "/") 'Wichtig! OpenOffice
' kommt aus der Unixwelt, von daher benutzen sie normale Slashs (Windows
' nutzt Backslashs)
oDoc.storeToURL("file:///" & save.FileName, ladeZustand) 'Datei wird
' als ods-Format abgespeichert
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
'OpenOffice sauber (ab)schliessen
oDoc.Close(True)
oDoc = Nothing
oSheet = Nothing
oDesk = Nothing
oSM = Nothing Wer wissen will was es mit prozess1 und prozess2 auf sich hat, der möge bitte http://www.vbarchiv.net/forum/read.php?f=10&i=54887&t=47570 hier reinschauen
Hoffe der eine oder andere kann damit was anfangen
lgk |