CALC: Dokument öffnen, auf Tab.-Blatt wechseln

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

Moderator: Moderatoren

speednetz
*
Beiträge: 16
Registriert: Mo, 03.01.2011 21:01

CALC: Dokument öffnen, auf Tab.-Blatt wechseln

Beitrag von speednetz »

Hallo
Kann mir vielleicht jeman helfen

Mein Problem ist ich möchte das wenn die Datei sich öffnet was schon so geht. das er das 3 Tabellenblatt öffnet.


Code: Alles auswählen

oSer = createUNOService("com.sun.star.system.SystemShellExecute")
  oSer.execute("C:\Statistik - Kopie\Statistik.ods",,0)


Wäre schön wenn mir einer eine Lösung geben könnte

Danke Ralf


Moderation,4: Tippfehler in Betreff (für Suchfunktionen) korrigiert
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: soll mit makro laufen

Beitrag von Toxitom »

Hallo Ralf,

Hmm, dein Code startet zwar das Calc-Dokument - das war es aber auch. Sehr ungünstig das Ganze.

Einzige Lösung in Deinem Fall: Schliesse das Statistik.ods mit Cursor auf der dritten Seite - dann sollte es auch damit wieder öffnen.

Willst Du das Ganze per Makro machen, benötigst Du Dein Dokument als Objekt.
Am einfachsten geht das über die Methode

Code: Alles auswählen

oDoc = starDesktop.loadComponentfromURL(convertToURL("C:\Statistik - Kopie\Statistik.ods")),"_blanc",0,array())
oDoc wäre jetzt das Objekt deines Dokumentes.
Nun kannst Du Dir Dein 3. Tabnellenblatt als Objekt holen:

Code: Alles auswählen

oSheet = oDoc.sheets(2)
oder - falls nur der Name bekannt ist:

Code: Alles auswählen

oSheet = oDoc.sheets.getByName("Tabellenblattname")
Und nun kannst Du das aktiv setzen:

Code: Alles auswählen

oDoc.getCurrentController.setActiveSheet(oSheet)
Das sollte es gewesen sein:)
VG Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
speednetz
*
Beiträge: 16
Registriert: Mo, 03.01.2011 21:01

Re: soll mit makro laufen

Beitrag von speednetz »

Danke Tom
Werde es testen.
Melde mich ob es funktioniert

Gruß Ralf
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: soll mit makro laufen

Beitrag von Karolus »

Hallo

Probiers mal schlicht und ergreifend mit:

Code: Alles auswählen

	oSer = createUNOService("com.sun.star.system.SystemShellExecute")
  	oSer.execute("C:\Statistik - Kopie\Statistik.ods#Tabelle3",,0) 
unter der Annahme das deine dritte Tabelle eben diesen Namen hat.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
speednetz
*
Beiträge: 16
Registriert: Mo, 03.01.2011 21:01

Re: soll mit makro laufen

Beitrag von speednetz »

Hallo Tom

Soweit läuft es,aber wenn er das Tabellenblatt geöffnet hat kann ich die dort liegenden Makro Bouton
nicht starten.

Ich bekomme die Mitteilung

Aus Sicherheitsgründen ist dieses Makro nicht ausführbar.

Nehme ich die Zeilen wieder raus läuft es wie vorher.

Hast du eine Idee wo ran das liegt.

Gruß Ralf
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: soll mit makro laufen

Beitrag von Stephan »

Du musst das Zulassen der Ausführung von Makros als Parameter übrergeben, z.B.:

Code: Alles auswählen

Dim par(0) As New com.sun.star.beans.PropertyValue
par(0).Name  = "MacroExecutionMode"
par(0).Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN

oDoc = starDesktop.loadComponentfromURL(convertToURL("C:\Statistik - Kopie\Statistik.ods")),"_blank",0,par())

oSheet = oDoc.sheets(2)
oDoc.getCurrentController.setActiveSheet(oSheet)
Gruß
Stephan
speednetz
*
Beiträge: 16
Registriert: Mo, 03.01.2011 21:01

Re: soll mit makro laufen

Beitrag von speednetz »

Hallo Stephan
Danke es läuft jetzt so wie ich es mir gedacht habe.

Der Sinn ist das ich dann in der Orginaldatei das makro Inhalt löschen starten kann.

Mein frage wäre kann ich das löschen vieleicht hinter diese Zeile legen

oDoc = starDesktop.loadComponentfromURL(convertToURL("C:\Statistik - Kopie\Statistik.ods")),"_blank",0,par())

dann müsst ich nicht auf das Tabellenblatt springen.

Würde mich über eine positive Nachricht freuen

Dank noch mal Stepfan

Gruß Ralf
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: soll mit makro laufen

Beitrag von Stephan »

Mein frage wäre kann ich das löschen vieleicht hinter diese Zeile legen

oDoc = starDesktop.loadComponentfromURL(convertToURL("C:\Statistik - Kopie\Statistik.ods")),"_blank",0,par())
ja. Zumindest fällt mir nichts ein was dagegen spricht.


Gruß
Stephan
speednetz
*
Beiträge: 16
Registriert: Mo, 03.01.2011 21:01

Re: soll mit makro laufen

Beitrag von speednetz »

Hallo Stephan

Habe versucht den inhalt des makros was ich zum löschen nutze dahinter zu setzen.

leider geht es so nicht.

Hier das makro was ich zum löschen nutze.

Code: Alles auswählen

sub    loeschen1
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$B$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$C$6:$G$56"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$C$60:$G$60"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "$B$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "Nr"
args8(0).Value = 2

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args8())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "ToPoint"
args9(0).Value = "$B$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args9())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "ToPoint"
args11(0).Value = "$C$6:$G$56"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args11())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "ToPoint"
args13(0).Value = "$C$60:$G$60"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args13())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args15(0) as new com.sun.star.beans.PropertyValue
args15(0).Name = "ToPoint"
args15(0).Value = "$B$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args15())



end Sub

Wenn das gehen würde und er dann die Datei zumachen würde wäre das super.

Dann brache ich nicht zu springen.

Vieleicht kannst du mir ja damit helfen

Gruß Ralf
Antworten