Calc-Programmierung; arbeiten unter VB2005

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Calc-Programmierung; arbeiten unter VB2005

Re: Calc-Programmierung; arbeiten unter VB2005

von turtle47 » Sa, 26.01.2008 18:47

Hallo Dietrich,

zum öffnen einer bestehen Calc-Datei verwende ich normalerweise folgenden Code:

Code: Alles auswählen

Sub NotizenOeffnen
Dim Dokument as Object
Dim sUrl as String
Dim Dummy()
sUrl = ConvertToUrl ("C:\Notizen.ods") ' Achtung: Pfad anpassen!
'Prüfungsroutine
  gefunden=false
  oComponents = StarDesktop.getComponents()
  oDocs = oComponents.createEnumeration()
  Do While oDocs.hasMoreElements()
    oDoc = oDocs.nextElement()
    datei=odoc.geturl()
     if datei=ConvertToUrl("C:\Notizen.ods") then ' Achtung: Pfad anpassen!
         Dokument=odoc
         gefunden=true
         msgbox "Die Datei ist bereits geöffnet!" ,64, "Datei öffnen"
     end if
  Loop
' Wenn nicht offen, dann öffnen
if gefunden=false then Dokument = StarDesktop.loadComponentFromURL   ( sUrl , "_blank", 0, Dummy() )
End Sub
Dieser Code hat den Vorteil, dass man den Pfad direkt angeben kann.
Es prüft zudem, ob die Datei bereits geöffnet ist weil es sonst zu einer Fehlermeldung kommt.
Aber das hilft Dir jetzt bei Deinem Problem auch nicht weiter.
Karolus hat geschrieben:Kann es sein das dein Makro im falschen Tabellenblatt werkelt:
Der Meinung bin ich mittlerweile auch.

Ich bin mit meinem Latein ziemlich am Ende.

Jürgen

Edit: Hast Du unsere Codes denn mal stand alone in einer normale Calcdatei probiert?

Re: Calc-Programmierung; arbeiten unter VB2005

von dherr » Sa, 26.01.2008 18:24

Gleicher Effekt: es wird immer nur 453 (in meinem Falle) als immer die gleiche Zeilenhöhe ausgegeben...

Re: Calc-Programmierung; arbeiten unter VB2005

von turtle47 » Sa, 26.01.2008 18:15

Hallo Dietrich,

Code: Alles auswählen

oCell = oSheet.getCellByPosition(1, zz)
Warum nimmst Du zur Ermittlung der Zeilenhöhe

Code: Alles auswählen

getCellByPosition
Das brauchst Du nicht und funktioniert bei mir auch nicht.
Es sollte doch folgendes reichen:

Code: Alles auswählen

For zz = 0 To 10
            oRow = oSheet.Rows(zz)
         .....
Jürgen

Re: Calc-Programmierung; arbeiten unter VB2005

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

Re: Calc-Programmierung; arbeiten unter VB2005

von turtle47 » Sa, 26.01.2008 16:29

Hi,
dherr hat geschrieben:Das thisComponent.sheets(0) kann ich überhaupt nicht anwenden im VB2005, da kommt Fehlermeldung.
Allerdings kann ich bspw. Tabelle ausfüllen indem ich vorher mache:
oSheet = oDoc.getSheets().getByIndex(0)
Dann sollte aber doch folgendes funktionieren:

Code: Alles auswählen

sub zeilenhoehe
odoc=thiscomponent
oSheet = oDoc.getSheets().getByIndex(0)
sumRH =0
For zz = 0 To 10
            oRow = oSheet.Rows(zz)
            Print(oRow.Height)
            sumRH=SumRH + (orow.Height)
        Next
        msgbox sumRH
end sub
Wenn nicht, könntest Du bitte mal etwas mehr zusammenhängenden Code posten?

Jürgen

Re: Calc-Programmierung; arbeiten unter VB2005

von dherr » Sa, 26.01.2008 15:00

danke für den tipp!

hatte es gerade selbst ausprobiert- no effect.

im moment weiß ich kein mittel mehr, wie ich das problem lösen könnte....

dietrich

Re: Calc-Programmierung; arbeiten unter VB2005

von Karolus » Sa, 26.01.2008 12:39

Hallo
Du musst nicht unbedingt eine Zelle selektieren um sie auszulesen oder zu beschreiben, - falls trotzdem dann mit:

.....
thisComponent.CurrentController.Select(ocell)

Gruß Karo

Re: Calc-Programmierung; arbeiten unter VB2005

von dherr » Sa, 26.01.2008 11:34

Kann es sein, dass es daran liegt, dass durch
oCell = oSheet.getCellByPosition(1, zz)
die entsprechende Zelle im Sheet nicht markiert wird?
Ich habe mir das mal schrittweise angesehen. zz wird zwar erhöht, aber in der Tabelle wird die aktuelle Zelle nicht markiert.
Vielleicht kann dann die Zeilenhöhe der Zeile, in der sich die akt. Zelle befindet, nicht ermittelt werden...

Dietrich

Re: Calc-Programmierung; arbeiten unter VB2005

von dherr » Sa, 26.01.2008 09:46

Das thisComponent.sheets(0) kann ich überhaupt nicht anwenden im VB2005, da kommt Fehlermeldung.
Allerdings kann ich bspw. Tabelle ausfüllen indem ich vorher mache:
oSheet = oDoc.getSheets().getByIndex(0)

Das Ausfüllen wird auch bestens in meinem Programm erledigt, also der Zugriff auf die Tabelle ist OK.
Nur eben die Bestimmung der Zeilenhöhen...

Dietrich

Re: Calc-Programmierung; arbeiten unter VB2005

von Karolus » Sa, 26.01.2008 00:20

Hallo
Kann es sein das dein Makro im falschen Tabellenblatt werkelt:

Code: Alles auswählen

sub zeilenhoehe
osheet = thisComponent.sheets(0) '???    Index überprüfen
For zz = 1 To 10
            oRow = oSheet.Rows(zz)
            Print(oRow.Height)
        Next
end sub
Gruß Karo

Re: Calc-Programmierung; arbeiten unter VB2005

von dherr » Fr, 25.01.2008 23:54

Nein, leider nicht.

Habe mittlerweile mal OO 2.3. installiert, habe damit aber den gleichen Effekt...

Re: Calc-Programmierung; arbeiten unter VB2005

von turtle47 » Fr, 25.01.2008 21:11

Hi Dietrich,

versuche mal folgendes:

Code: Alles auswählen

Sub ZeilenhoehenAuslesen
	myDoc = thisComponent
	mySheet = myDoc.Sheets(0)
	Rowheight = 0
	for i = 1 to 10
	myheight=mysheet.Rows(Rowheight).height
	msgbox myheight
	Rowheight = Rowheight +1
	next i
End Sub
Hilft das weiter?

Viel Erfolg.

Jürgen

Re: Calc-Programmierung; arbeiten unter VB2005

von dherr » Fr, 25.01.2008 19:21

Gleich noch was dazu:
Ich habe, um das zu testen Folgendes gemacht:
Habe ne Calc Tabelle geöffnet, die in den Anfangszeilen mit Daten gefüllt ist und die unterschiedlichsten Zeilenhöhen aufweist.
Dann:

Code: Alles auswählen

        For zz As Integer = 1 To 22
            oRow = oSheet.Rows(zz)
            Debug.Print(oRow.Height)
        Next
(ist VB2005, aber Prinzip ist klar)
Dabei schreibt er mir aber immer nur die 453 (1/100 mm) hin, aber nicht die verschiedenen Höhen... ??

Dietrich

Re: Calc-Programmierung; arbeiten unter VB2005

von dherr » Fr, 25.01.2008 19:10

Hallo Thomas,
danke für die Antwort.
Ich habe das ganze auch ohne den Befehl .OptimalHeight getestet, mit dem gleichen Ergebnis.

Bei mir ist im Calc die Zeilenhöhe mit 4,5 festgelegt und die Checkbox 'Standard' angehakt.
Und zwar nur bei einer 'normalen' Zeile. Wenn ich mir das bei einer höheren Zeile anschaue, ist die richtige Höhe angezeigt und 'Standard' ist nicht angehakt.
Nur, wie kann ich das programmtechnisch verwerten?
Ich müsste ja, ehe ich die Zeile anspreche, erst irgendwie diese Standard-Checkbox 'ab'haken...?

OO 2.3.1.--- kann ich wohl nicht verwenden, weil der Kunde für den ich arbeite nur 2.0 hat.
Oder gibts da keine Probleme in der Kompatibilität?

Gruß-
Dietrich

Re: Calc-Programmierung; arbeiten unter VB2005

von Toxitom » Do, 24.01.2008 17:54

Hey dHerr,
dherr hat geschrieben:Es wird durch diese Befehlsfolge aber immer nur die Standardhöhe ausgegeben, nicht beispielsweise die dreifache Standardhöhe, wenn Umbruch in einer Zelle der Zeile besteht.
hmm, kann ich nicht nachvollziehen. Bei mir wird die tatsächliche Höhe der Reihe ausgegeben - auch wenn ich deinen Code nutze.
Ich denke allerdings auch, dass die "OptimalHeight" nicht gesetzt werden müsste - das ist sie doch sowieso???
Möglicherweise hast du aber einen Vorgabewert fest in den Zelleigenschaften (Zeilenhöhe) stehen ??

Gruss
Thomas

Ach ja: OOo 2.3.1 unter MS Vista

Nach oben