Seite 1 von 1
[gelöst] mit writer-makro ein sheet auslesen ?
Verfasst: So, 19.08.2012 17:32
von sven-my
Hallo Experten,
entweder ist es die Hitze, oder ich bin zu doof zum Suchen. Wahrscheinlich letzteres.
Ich will mit einem Makro in writer eine calc-tabelle auslesen.
Das Öffnen klappt hervorragend, das Auslesen auch soweit, nur daß ich vor dem Auslesen die Zelle(1,23) / (B24) aktualisieren muß.
Mein Problem: ich finde keine Möglichkeit, wie ich das Dokument "Daten.ods" mit dem Makro in writer ansprechen kann, wenn dies schon geöffnet ist.
Code: Alles auswählen
Sub DateiOeffnen
Pfad = "E:\OpenOffice\Datenbanken\Daten.ods"
Url = ConvertToUrl(Pfad)
Dim myFileProp(1) as New com.sun.star.beans.PropertyValue
myFileProp(0).Name = "MacroExecutionMode"
myFileProp(0).Value = 4
Calc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, myFileProp())
Sheet = Calc.Sheets().getByName("Ergebnis")
Tex = Sheet.getCellbyPosition(1,23).string
msgbox Tex
End Sub
Ich hab's probiert mit
Code: Alles auswählen
sub Daten_lesen
calc = "Daten"
Sheet = Calc.Sheets().getByName("Ergebnis")
Tex = Sheet.getCellbyPosition(1,23).string
msgbox Tex
End sub
aber das ist wohl zu einfach gedacht, denn es ergibt in der zweiten Zeile
"BASIC Laufzeitfehler / Objektvariable nicht belegt".
Wo mache ich den Fehler, und wie kann ich ihn beheben ?
gruß
sven-my
Re: mit writer-makro ein sheet auslesen ?
Verfasst: So, 19.08.2012 18:56
von Stephan
Wo mache ich den Fehler, und wie kann ich ihn beheben ?
Du mußt erst das richtige Dateiobjekt finden und referenzieren, denn es können ja auch mehrere Dateien geöffnet sein. Ein passender Code ist in meinem post vom Fr, 22.12.2006 03:42 im Thread
viewtopic.php?f=18&t=10289.
Dort entspricht der Inhalt der Objektvariablen "aktuell" dem was Du als "calc" in Deinem Makro bezeichnest.
Gruß
Stephan
Re: mit writer-makro ein sheet auslesen ?
Verfasst: So, 19.08.2012 19:33
von sven-my
Hallo Stephan,
herzlichen Dank !
Nachdem ich Dateinamen, sheetnamen, und Zelle geändert habe, gab's schon mal den ersten Erfolg: die Zelle wurde mit Deiner Zahl belegt.
Den Rest bekomme ich jetzt hin, muß nur noch etwas "straffen".
Hat mir sehr geholfen - hätte mal früher anfragen sollen (acht Stunden Suche im Netz und den gesammelten Unterlagen ist bei der Hitze (>30° unterm Dach) kein Vergnügen.
gruß
sven-my
Re: mit writer-makro ein sheet auslesen ?
Verfasst: So, 19.08.2012 23:51
von sven-my
Hallo Stephan,
ich benötige doch nochmal Deine Hilfe.
Wenn das Dokument, aus dem ich die Daten haben will, noch nicht geöffnet ist, wollte ich es so öffnen, klappt auch, aber die Abfrage >hasLocation()< ist in diesem Fall doch unnötig.
Da ich Deinen code auch nicht so richtig verstanden habe, ist die Zuweisung a=a auch nur eine Krücke.
Code: Alles auswählen
sub Doc_öffnen
Adb = "Adressen.ods"
laenge = Len(Adb)
alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
aktuell = elemente.NextElement()
If HasUnoInterfaces( aktuell, "com.sun.star.frame.XModel" ) Then
If aktuell.hasLocation() Then
a=a
else
Pfad = "E:\OpenOffice\Datenbanken\Adressen.ods"
Url = ConvertToUrl(Pfad)
Dim myFileProp(1) as New com.sun.star.beans.PropertyValue
myFileProp(0).Name = "MacroExecutionMode"
myFileProp(0).Value = 4
Calc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, myFileProp())
exit sub
end if
end if
Loop
end sub
Hier wird dann von vorne gestartet, nur könnte ich mir das ja sparen, denn das die Datei geöffnet ist, ist ja jetzt klar.
Code: Alles auswählen
sub calc_auslesen
dim aAdr(23)
Adb = "Adressen.ods"
laenge = Len(Adb)
alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
aktuell = elemente.NextElement()
If HasUnoInterfaces( aktuell, "com.sun.star.frame.XModel" ) Then
If aktuell.hasLocation() Then
if Right(ConvertFromURL(aktuell.GetLocation),laenge) = Adb Then
blatt = aktuell.getSheets().GetByName("Ergebnis")
' empfAll = blatt.getCellByPosition(1,23).string
for i = 0 to 23
aAdr(i) = blatt.getCellByPosition(1,i).string
next i
end if
end if
end if
Loop
rem --- bookmark ---
oDoc = thisComponent
oBM = oDoc.getBookmarks().getByName("Empfänger_Alles")
oBM.getAnchor().String = aAdr(23)
.
.
.
oBM = oDoc.getBookmarks().getByName("Zusatz")
oBM.getAnchor().String = aAdr(6)
end sub
gruß
sven-my
Re: mit writer-makro ein sheet auslesen ?
Verfasst: Mo, 20.08.2012 21:31
von sven-my
Hallo Stephan,
Deine Hilfe hat mein Projekt zu einem guten Abschluß gebracht.
Dies ist Dein, von mir, umgefrikkelter code:
Code: Alles auswählen
rem ---------------------------------------------
sub calc_auslesen
dim aAdr(24)
dim Db as string
Db = "leer"
oDoc = ThisComponent
If oDoc.hasLocation() then exit Sub
rem --- Daten lesen ---
Adb = "Adressen.ods"
laenge = Len(Adb)
alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
aktuell = elemente.NextElement()
If HasUnoInterfaces( aktuell, "com.sun.star.frame.XModel" ) Then
If aktuell.hasLocation() Then
if Right(ConvertFromURL(aktuell.GetLocation),laenge) = Adb Then
blatt = aktuell.getSheets().GetByName("Ergebnis")
Db = blatt.getCellByPosition(0,0).string
msgbox "bitte Adresse auswählen"
while GE <> "neu"
GE = blatt.getCellByPosition(1,26).string
wend
for i = 0 to 24
aAdr(i) = blatt.getCellByPosition(1,i).string
next i
blatt.getCellByPosition(1,26).string = "gelesen"
end if
end if
end if
Loop
if Db = "leer" then
msgbox "Datenbank nicht geöffnet"
oeffnen.DocOeffnen()
exit sub
end if
rem --- bookmark schreiben ---
oDoc = thisComponent
oBM = oDoc.getBookmarks().getByName("Empfänger_Alles")
oBM.getAnchor().String = aAdr(24)
oBM = oDoc.getBookmarks().getByName("AnredeText")
oBM.getAnchor().String = aAdr(12)
oBM = oDoc.getBookmarks().getByName("Anmerkung1")
oBM.getAnchor().String = aAdr(13)
oBM = oDoc.getBookmarks().getByName("Feld1") 'Speichername
oBM.getAnchor().String = aAdr(14)
oBM = oDoc.getBookmarks().getByName("Feld3") 'Kdn-Nr.
oBM.getAnchor().String = aAdr(16)
oBM = oDoc.getBookmarks().getByName("Feld4") 'm. Brief vom
oBM.getAnchor().String = aAdr(17)
oBM = oDoc.getBookmarks().getByName("Feld7") '+ Ihr Zeichen
oBM.getAnchor().String = aAdr(20)
oBM = oDoc.getBookmarks().getByName("Feld8") '+ Betreff1
oBM.getAnchor().String = aAdr(21)
oBM = oDoc.getBookmarks().getByName("Fax")
oBM.getAnchor().String = aAdr(22)
oBM = oDoc.getBookmarks().getByName("eMail")
oBM.getAnchor().String = aAdr(23)
oBM = oDoc.getBookmarks().getByName("Name")
oBM.getAnchor().String = aAdr(0)
oBM = oDoc.getBookmarks().getByName("Zusatz")
oBM.getAnchor().String = aAdr(6)
wait 500
bereinigen.bereinigen()
end sub
den hier habe zum öffnen des calc-Doc:
Code: Alles auswählen
sub DocOeffnen
dim Pfad as String
dim Dummy()
dim Url as String
dim Calc as Object
dim LW as string
lw = mid(CurDir,1,2)
Pfad = lw & "\OpenOffice\Datenbanken\Adressen.ods"
Url = ConvertToUrl(Pfad)
Dim myFileProp(1) as New com.sun.star.beans.PropertyValue
myFileProp(0).Name = "MacroExecutionMode"
myFileProp(0).Value = 4
Calc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, myFileProp())
end sub
gruß
sven-my