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

Code: Alles auswählen

Doc_A = ThisComponent
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