von dherr » Sa, 26.01.2008 17:53
Code: Alles auswählen
Dim prozess1() As Process
Dim prozess2() As Process
Dim procId As Integer = 0
Dim oSM As Object 'Hauptobjekt fuer den Zugriff auf OpenOffice von VB.Net aus (SM: ServiceManager)
Dim oDesk, oDoc, oSheet, oRange, oCell, oNames, oRow 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 ex As Exception
MessageBox.Show(ex.Message, "FEHLER OO", MessageBoxButtons.OK, _
MessageBoxIcon.Warning)
Clipboard.SetText(ex.Message)
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
...
Dim str As String = pfad + fName + ".ods"
str = str.Replace("\", "/")
str = "file:///" + str.Replace(":", "|") 'der Dateiname inkl. Pfad für OOCalc
oDoc = oDesk.loadComponentFromURL(str, "_blank", 0, ladeZustand) 'öffnen der Datei im Calc
...
oSheet = oDoc.getSheets().getByIndex(0) ' 1.Blatt der Mappe
For zz As Integer = 0 To 22
oCell = oSheet.getCellByPosition(1, zz)
oRow = oSheet.Rows(zz)
Debug.Print(oRow.Height)
Next
...
Das ist die gesamte Vorgehensweise, um in VB2005 eine bestehende OO-Calc zu öffnen. Habe ich auch aus einem Beispielprogramm so zu sagen kopiert

.
Wie gesagt, in den ersten Zeilen (0...22) sind Daten enthalten und fast jede Zeile hat eine andere Höhe.
Nur das wird eben nicht ermittelt...??
Vielleicht ist der Vorspann bis zum Öffnen der Datei auch zu umfangreich/unnötig kompliziert...
Dietrich
[code] Dim prozess1() As Process
Dim prozess2() As Process
Dim procId As Integer = 0
Dim oSM As Object 'Hauptobjekt fuer den Zugriff auf OpenOffice von VB.Net aus (SM: ServiceManager)
Dim oDesk, oDoc, oSheet, oRange, oCell, oNames, oRow 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 ex As Exception
MessageBox.Show(ex.Message, "FEHLER OO", MessageBoxButtons.OK, _
MessageBoxIcon.Warning)
Clipboard.SetText(ex.Message)
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
...
Dim str As String = pfad + fName + ".ods"
str = str.Replace("\", "/")
str = "file:///" + str.Replace(":", "|") 'der Dateiname inkl. Pfad für OOCalc
oDoc = oDesk.loadComponentFromURL(str, "_blank", 0, ladeZustand) 'öffnen der Datei im Calc
...
oSheet = oDoc.getSheets().getByIndex(0) ' 1.Blatt der Mappe
For zz As Integer = 0 To 22
oCell = oSheet.getCellByPosition(1, zz)
oRow = oSheet.Rows(zz)
Debug.Print(oRow.Height)
Next
...[/code]
Das ist die gesamte Vorgehensweise, um in VB2005 eine bestehende OO-Calc zu öffnen. Habe ich auch aus einem Beispielprogramm so zu sagen kopiert ;-).
Wie gesagt, in den ersten Zeilen (0...22) sind Daten enthalten und fast jede Zeile hat eine andere Höhe.
Nur das wird eben nicht ermittelt...??
Vielleicht ist der Vorspann bis zum Öffnen der Datei auch zu umfangreich/unnötig kompliziert...
Dietrich