Seite 1 von 1
[gelöst] ODS öffnen und per Makro darauf zugreifen
Verfasst: Di, 27.01.2009 23:26
von oktobaer
Hallo Ihr!
Möchte Daten und Makros in getrennten CALC-Dateien haben.
Also :
1.) starte Makro in "A.ods" -> funktioniert
2.) diese öffnet "B.ods" -> funktioniert
3.) wechsle die Ansicht wieder auf "A.ods" -> mit welchem Befehl?
4.) Makro holt die Daten aus "B.ods" -> mit welchem Befehl bzw. wie schaut die Adressierung von Zellen Dateiübergreifend aus?
Bitte um Tipps für 3.) und 4.)
Danke!
Oktogrüße
Re: ODS öffnen und auf per Makro darauf zugreifen
Verfasst: Mi, 28.01.2009 08:59
von Charly
Hallo!
Um auf zwei Dokumente zugreifen zu können, musst für diese Namen zuweisen.
Dokument A
Bei Dokument B musst du die Zuweisung beim Öffnen machen:
[
Code: Alles auswählen
dim dummy()
oDesktop = createUnoService("com.sun.star.frame.Desktop")
Url = "C:\Pfad\B.ods"
Url = ConvertToUrl(Url)
Doc_B = oDesktop.loadComponentFromURL( Url, "_blank", 0,dummy() )
Mit dem Dokumentennamen kannst du zwischen beiden Dokumenten hin und herspringen und hast einen Zugriff auf die jeweiligen Zellen.
Gruß
Charly
Re: ODS öffnen und auf per Makro darauf zugreifen
Verfasst: Mi, 28.01.2009 21:05
von oktobaer
Hallo Charly!
Danke für den Tipp.
Öffnen funktioniert, allerdings kann ich nicht auf die Ansicht von Dokument "A" zurückschalten -> Fehler: Objektvariable nicht belegt
Code: Alles auswählen
DOC_A = ThisComponent
dim dummy()
oDesktop = createUnoService("com.sun.star.frame.Desktop")
Url = "C:\Daten\MDB\MDB-TestDatei.ods"
Url = ConvertToUrl(Url)
Doc_B = oDesktop.loadComponentFromURL( Url, "_blank", 0,dummy()
DOC_A.CurrentController.setActiveSheet("Setup")
'auch: DOC_A.CurrentController.setActiveSheet(1) geht nicht!
Was mache ich falsch - bitte um Vorschläge!
Oktogrüße
Re: ODS öffnen und auf per Makro darauf zugreifen
Verfasst: Mi, 28.01.2009 21:26
von turtle47
Hi Oktobaer,
schau Dir mal die untere Hälfte dieses
Beitrags an.
Ist es das was Du suchst?
Jürgen
Re: ODS öffnen und auf per Makro darauf zugreifen
Verfasst: Mi, 28.01.2009 22:12
von oktobaer
Hallo Jürgen!
du bist Spitze: Mein Punkt 3.) ist gelöst!
Code: Alles auswählen
DOC_A.CurrentController.Frame.getContainerWindow().setFocus
bleibt noch Zugriff auf eine Zelle der anderen Datei (Punkt 4.) :
Code: Alles auswählen
wert$= DOC_B.Sheets.GetByName("MDB").getCellByPosition(3,2)
Ergibt einen Fehler! Warum?
Oktobaer
Re: ODS öffnen und auf per Makro darauf zugreifen
Verfasst: Mi, 28.01.2009 22:46
von turtle47
Nabend Oktobaer,
oktobaer hat geschrieben:
Ergibt einen Fehler! Warum?
Na, weil Du keine Wert holst!
Code: Alles auswählen
Wert$ = DOC_B.Sheets().GetByName("MDB").getCellByPosition(3,2).value
sollte gehen.
Gut's Nächtle.
Jürgen
Re: ODS öffnen und auf per Makro darauf zugreifen
Verfasst: Mi, 28.01.2009 23:13
von oktobaer
Hallo Jürgen!
Danke, Du hast wieder mal Recht - in meinem Fall hat nicht ".value" sondern ".string" gefehlt!
Hier für alle die kpl. Lösung:
Code: Alles auswählen
DOC_A = ThisComponent
dim dummy()
oDesktop = createUnoService("com.sun.star.frame.Desktop")
Url = "C:\Daten\MDB\MDB-TestDatei.ods"
Url = ConvertToUrl(Url)
DOC_B = oDesktop.loadComponentFromURL( Url, "_blank", 0,dummy() )
DOC_A.CurrentController.Frame.getContainerWindow().setFocus
zeile%=1 ' = 2. Zeile
spalte%=2 ' = 3. Spalte
wert$= DOC_B.Sheets.GetByName("MDB").getCellByPosition(spalte%,zeile%).string
print wert$
Vielen Dank !!!
OktoBaer
Re: [gelöst] ODS öffnen und per Makro darauf zugreifen
Verfasst: Mi, 28.01.2009 23:37
von turtle47
Hi Oktobaer,
warum öffnest Du das Quelldokument sichtbar und wechselst dann mit dem Focus?
Öffne doch das Quelldokument im Hintergrund, hole den Wert und schliesse es wieder.
Hier mal ein Beispielcode dafür:
Code: Alles auswählen
Sub Main
DOC_A = ThisComponent
oDesktop = createUnoService("com.sun.star.frame.Desktop")
Url = ConvertToUrl ("C:\Daten\MDB\MDB-TestDatei.ods")
dim p(0) as new com.sun.star.beans.PropertyValue
p(0).Name = "Hidden"
p(0).Value = true
Doc_B = StarDesktop.loadComponentFromURL(Url, "_default", 0, p())
zeile%=1 ' = 2. Zeile
spalte%=2 ' = 3. Spalte
wert$= DOC_B.Sheets.GetByName("MDB").getCellByPosition(spalte%,zeile%).string
print wert$
Doc_B.close (True)
End Sub
Oder brauchst Du "DOC_B" noch zum bearbeiten?
Jürgen
Re: [gelöst] ODS öffnen und per Makro darauf zugreifen
Verfasst: Mi, 28.01.2009 23:49
von oktobaer
Hallo Jürgen!
Das ist ja schon hypergenial!
Es funktioniert und damit hat sich auch noch ein anderes Problem erledigt!
Ich spendiere Dir ein Bier - Prost!
Danke!
Oktobaer