[gelöst] ODS öffnen und per Makro darauf zugreifen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
oktobaer
***
Beiträge: 69
Registriert: So, 18.01.2009 23:19
Wohnort: bei Nürnberg

[gelöst] ODS öffnen und per Makro darauf zugreifen

Beitrag 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
Zuletzt geändert von oktobaer am Mi, 28.01.2009 23:14, insgesamt 2-mal geändert.
Servus
Claus
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: ODS öffnen und auf per Makro darauf zugreifen

Beitrag 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
Benutzeravatar
oktobaer
***
Beiträge: 69
Registriert: So, 18.01.2009 23:19
Wohnort: bei Nürnberg

Re: ODS öffnen und auf per Makro darauf zugreifen

Beitrag 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
Servus
Claus
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: ODS öffnen und auf per Makro darauf zugreifen

Beitrag von turtle47 »

Hi Oktobaer,

schau Dir mal die untere Hälfte dieses Beitrags an.
Ist es das was Du suchst?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
oktobaer
***
Beiträge: 69
Registriert: So, 18.01.2009 23:19
Wohnort: bei Nürnberg

Re: ODS öffnen und auf per Makro darauf zugreifen

Beitrag 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
Servus
Claus
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: ODS öffnen und auf per Makro darauf zugreifen

Beitrag 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
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
oktobaer
***
Beiträge: 69
Registriert: So, 18.01.2009 23:19
Wohnort: bei Nürnberg

Re: ODS öffnen und auf per Makro darauf zugreifen

Beitrag 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
Servus
Claus
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: [gelöst] ODS öffnen und per Makro darauf zugreifen

Beitrag 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
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
oktobaer
***
Beiträge: 69
Registriert: So, 18.01.2009 23:19
Wohnort: bei Nürnberg

Re: [gelöst] ODS öffnen und per Makro darauf zugreifen

Beitrag 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
Servus
Claus
Antworten