Mehrere Blättter aktivieren
Moderator: Moderatoren
Mehrere Blättter aktivieren
Hallo,
mit ThisComponent.CurrentController.SetActiveSheet(ThisComponent.Sheets.getByName("Sheet1"))
kann man EIN Blatt aktivieren. Wie kann man aber MEHRERE Blätter gleichzeitig aktivieren?
Hintergrund: Bestimmte Blätter sollen per werden aktiviert werden, damit man dann "per Hand" deren Druck befehlen kann.
Stefan
mit ThisComponent.CurrentController.SetActiveSheet(ThisComponent.Sheets.getByName("Sheet1"))
kann man EIN Blatt aktivieren. Wie kann man aber MEHRERE Blätter gleichzeitig aktivieren?
Hintergrund: Bestimmte Blätter sollen per werden aktiviert werden, damit man dann "per Hand" deren Druck befehlen kann.
Stefan
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Mehrere Blättter aktivieren
Das hilft Dir nun nicht weiter, wenn ich Dir sage, dass man damit kein Blatt aktivieren, sondern SICHTBAR machen kann...delta9 hat geschrieben:kann man EIN Blatt aktivieren
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Mehrere Blättter aktivieren
Ist "sichtbarmachen" der treffendere Ausdruck? Man kann doch auch per Hand mehrere Arbeitsblätter über deren Reiter unten gleichzeitig "anwählen", sichtbar ist trotzdem nur eins.
Egal wie das Wort heisst, ich meine es in dem Sinn, dass ich dann per Hand über Menüsteuerung diese "sichtbar" gemachten Blätter ausdrucken kann.
Oder anders gefragt: Kann ich den Druck per Makro so auslösen, dass ich vor dem Druck auswählen kann, welchen Drucker ich nehme usw. also das normale Druckmenü erscheint. Dann könnte ich auf dieses "sichtbar machen mehrerer Seiten" verzichten. (
(Wobei ich nicht das ganze Druckmenü nochmals selber irgendwie als Dialog mühsam programmiert aufbauen will - das ginge sicher auch)
Egal wie das Wort heisst, ich meine es in dem Sinn, dass ich dann per Hand über Menüsteuerung diese "sichtbar" gemachten Blätter ausdrucken kann.
Oder anders gefragt: Kann ich den Druck per Makro so auslösen, dass ich vor dem Druck auswählen kann, welchen Drucker ich nehme usw. also das normale Druckmenü erscheint. Dann könnte ich auf dieses "sichtbar machen mehrerer Seiten" verzichten. (
(Wobei ich nicht das ganze Druckmenü nochmals selber irgendwie als Dialog mühsam programmiert aufbauen will - das ginge sicher auch)
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Mehrere Blättter aktivieren
Die Anweisung, die Du gepostet hat, macht das Blatt sichtbar - mit dem Code kann man aber nicht mehrere Blätter selektieren.delta9 hat geschrieben:Ist "sichtbarmachen" der treffendere Ausdruck? Man kann doch auch per Hand mehrere Arbeitsblätter über deren Reiter unten gleichzeitig "anwählen", sichtbar ist trotzdem nur eins.
Von unserem Member turtle47delta9 hat geschrieben:Oder anders gefragt: Kann ich den Druck per Makro so auslösen, dass ich vor dem Druck auswählen kann, welchen Drucker ich nehme usw. also das normale Druckmenü erscheint. Dann könnte ich auf dieses "sichtbar machen mehrerer Seiten" verzichten.
Code: Alles auswählen
Sub PrintDialog
GlobalScope.BasicLibraries.LoadLibrary("Tools")
DispatchSlot(5504)
End Sub
Hilft Dir das weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Mehrere Blättter aktivieren
Hallo Winfried,
danke, das hilft mir schon mal gut weiter, vielen Dank!
Bleibt nur noch die Frage, wie ich die Blätter selektiere, auswählte oder wie das heisst, die gedruckt werden sollen?
Und du hast mich neugierig gemacht: Gibt es eine Übersicht mit den Nummern des Befehls DispatchSlot(xxxx)?
Stefan
danke, das hilft mir schon mal gut weiter, vielen Dank!
Bleibt nur noch die Frage, wie ich die Blätter selektiere, auswählte oder wie das heisst, die gedruckt werden sollen?
Und du hast mich neugierig gemacht: Gibt es eine Übersicht mit den Nummern des Befehls DispatchSlot(xxxx)?
Stefan
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Mehrere Blättter aktivieren
Eine Quelle im Netz kann ich aktuell nicht finden... ich hänge mal meine Version von Dezember 2007 hier an.delta9 hat geschrieben:Und du hast mich neugierig gemacht: Gibt es eine Übersicht mit den Nummern des Befehls DispatchSlot(xxxx)?
Ob Du (oder ein anderer) damit was anfangen kann...? Ich eher nicht
Viel Erfolg!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Mehrere Blättter aktivieren
Die IDs sind nur eine andere Bezeichnung für die entsprechenden Dispatcher-Befehle. Der Code:Ob Du (oder ein anderer) damit was anfangen kann...? Ich eher nicht
Code: Alles auswählen
Sub PrintDialog
GlobalScope.BasicLibraries.LoadLibrary("Tools")
DispatchSlot(5504)
End Sub
Code: Alles auswählen
sub PrintDialog2
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())
end sub
Code: Alles auswählen
sub PrintDialog3
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, "slot:5504", "", 0, Array())
end sub
In Deiner sxc-Datei findest Du z.B. die ID 5504 in Tabelle "Sfx2" in Zelle H46 und kannst den zugehötigen UNO-Befehl in Zelle F46 ablesen.
Möglicherweise (kommt auf den Zweck und persönliche Vorliebe an) erschließt sich eine Übersicht nach OOo-Modulen geordnet leichter, anhängend als PDF (online derzeitig auch nicht verfügbar)
2 weitere Beispiele wären:
slot:5500 --> 'öffnet Vorlagen und Dokumente'-Fenster
slot:5501 --> öffnet 'Öffnen'-Fenster
Anmerkung:
Beides ging zumindeest früher auch mittels Kommandozeile:
soffice slot:5500
soffice slot:5501
DispatchSlot(x) ist wohl auch nur verwendbar solange der Befehl keine Parameter benötigt. (benötigt! nicht zulässt, denn .uno:Print akzeptiert auch Parameter, aber braucht sie eben nicht zwingend)
Gruß
Stephan
- Dateianhänge
-
- Dispatch-commands-2.0.pdf
- (197.11 KiB) 142-mal heruntergeladen
Re: Mehrere Blättter aktivieren
Hallo Stephan,
das war je ein sehr interessanter Ausflug, bin nun wieder etwas schlauer.
Vermutlich habe ich mein ursprüngliches Anliegen mit meiner Nebenfrage selber zugeschüttet, daher nochmal:
Wie kann ich per Makro mehrere Blätter selektieren, auswählen, markieren (oder wie das heisst) die gedruckt werden sollen?
Stefan
das war je ein sehr interessanter Ausflug, bin nun wieder etwas schlauer.
Vermutlich habe ich mein ursprüngliches Anliegen mit meiner Nebenfrage selber zugeschüttet, daher nochmal:
Wie kann ich per Makro mehrere Blätter selektieren, auswählen, markieren (oder wie das heisst) die gedruckt werden sollen?
Stefan
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Mehrere Blättter aktivieren
vielleicht so: viewtopic.php?f=18&t=47574 ?delta9 hat geschrieben:Wie kann ich per Makro mehrere Blätter selektieren, auswählen, markieren (oder wie das heisst) die gedruckt werden sollen?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Mehrere Blättter aktivieren
Hallo Komma 4
ja, den Beitrag habe ich auch schon gesehen.
Aber wie Stephan ja schreibt, wählt man bei dieser Auswahl der Seiten nur die x-te y-te und z-te Seite von einem gewählten Ausdruck aus.
Also wenn ich ohne diese Seitenauswahl 20 Seiten ausdrucken würde, dann kann ich wählen ob ich hiervon z.B. nur die Seiten 5 bis 9 drucke möchte, die
Nummerierung bezieht sich auf die Druckseiten. (Na ja, Stephan hats klarer formuliert als ich
)
Ich denke, xemu hat vielleicht ein ähnliches Problem wie ich.
Ich zumindest will bestimmte BLÄTTER (Sheets) bzw. deren Druckbereich ausdrucken. Hierzu müsste ich diese irgendwie selektieren.
Natürlich könnte ich mir irgendwie hochkompliziert ausrechnen, welchen Druckseiten das entspricht, aber geht's nicht auch einfacher?
Stefan
ja, den Beitrag habe ich auch schon gesehen.
Aber wie Stephan ja schreibt, wählt man bei dieser Auswahl der Seiten nur die x-te y-te und z-te Seite von einem gewählten Ausdruck aus.
Also wenn ich ohne diese Seitenauswahl 20 Seiten ausdrucken würde, dann kann ich wählen ob ich hiervon z.B. nur die Seiten 5 bis 9 drucke möchte, die
Nummerierung bezieht sich auf die Druckseiten. (Na ja, Stephan hats klarer formuliert als ich

Ich denke, xemu hat vielleicht ein ähnliches Problem wie ich.
Ich zumindest will bestimmte BLÄTTER (Sheets) bzw. deren Druckbereich ausdrucken. Hierzu müsste ich diese irgendwie selektieren.
Natürlich könnte ich mir irgendwie hochkompliziert ausrechnen, welchen Druckseiten das entspricht, aber geht's nicht auch einfacher?
Stefan
-
- ****
- Beiträge: 159
- Registriert: So, 17.10.2010 16:54
Re: Mehrere Blättter aktivieren
Hallo delta9,
Nun steht in oRanges "Tabelle1.A1;Tabelle2.A1;Tabelle3.A1".
Nun selektieren wir das und schauen es uns in der Druckvorschau an:
Voraussetzung ist natürlich, dass es die drei Tabellen gibt und dass in allen drei auch etwas drin steht.
viele Grüße
Axel
Ein CellRange, bestehend aus nicht zusammenhängenden einzelnen CellRanges kann per Makro so erstellt werden:delta9 hat geschrieben:Wie kann ich per Makro mehrere Blätter selektieren
Code: Alles auswählen
oRanges = thiscomponent.createInstance("com.sun.star.sheet.SheetCellRanges")
oRange = thiscomponent.sheets(0).getCellRangeByName("A1")
oRanges.addRangeAddress(oRange.RangeAddress, True)
oRange = thiscomponent.sheets(1).getCellRangeByName("A1")
oRanges.addRangeAddress(oRange.RangeAddress, True)
oRange = thiscomponent.sheets(2).getCellRangeByName("A1")
oRanges.addRangeAddress(oRange.RangeAddress, True)
Nun selektieren wir das und schauen es uns in der Druckvorschau an:
Code: Alles auswählen
oController = thiscomponent.currentcontroller
oController.select(oRanges)
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oDispatcher.executeDispatch(oController.Frame, ".uno:PrintPreview", "", 0, Array())
viele Grüße
Axel
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Mehrere Blättter aktivieren
Nochmal ein wenig nachgedacht und recherchiert:delta9 hat geschrieben:Ich zumindest will bestimmte BLÄTTER (Sheets) bzw. deren Druckbereich ausdrucken.
Im DevelopersGuide /Spreadsheet/Spreadsheet.htm#1+2+3+1+Printer+and+Print+Job+Settings
steht nichts von einer Druckoption "nur ausgewählte Blätter drucken"
Die Möglichkeit das festzulegen entspricht der Einstellung in Extras>Optionen...>OpenOffice.org Calc>Drucken.
Wenn Du nicht sicherstellen kannst, dass der Benutzer die Option gesetzt hat, dann stelle sie selbst ein:
in der Datei ~/.openoffice.org/3/user/registry/data/org/openoffice/Office/Calc.xcu
setze
Code: Alles auswählen
<node oor:name="Print">
<node oor:name="Other">
<prop oor:name="AllSheets" oor:type="xs:boolean">
<value>true</value>
</prop>
</node>
</node>
Die gute Nachricht:
dafür habe ich ein funktionierendes Codebeispiel:
Code: Alles auswählen
Sub de47499
' 2011-03-22
oServiceManager = GetProcessServiceManager()
oConfigProvider = oServiceManager.createInstance( _
"com.sun.star.configuration.ConfigurationProvider" )
Dim aProp(1) As New com.sun.star.beans.PropertyValue
aProp(0).Name = "nodepath"
aProp(0).Value = "org.openoffice.Office.Calc/Print/"
oCUA = oConfigProvider.createInstanceWithArguments( _
"com.sun.star.configuration.ConfigurationUpdateAccess" , aProp() )
If oCUA.hasByName( "Other" ) Then
oNodePrintAllSheets = oCUA.getByName( "Other" )
oNodePrintAllSheets.setPropertyValue( "AllSheets", "FALSE" )
oCUA.commitChanges ()
End If
exit sub
Die schlechte Nachricht:
die Eigenschaft wird durch die SUB zwar gesetzt, von einer laufenden OOo-Anwendung aber nicht ausgewertet.
Erst nach einem Neustart von OOo wird das beim Drucken berücksichtigt....

Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Mehrere Blättter aktivieren
Hallo Winfried,
da hast Du Dir ja viel Mühe gegeben. Eventuell kann ich das auch nochmal gebrauchen, aber es trifft nicht ganz den Kern meines Problems.
Ich will ja bestimmte Blätter per Makro AUSWÄHLEN. Dass nur die ausgewählten Blätter gedruckt werden, kann ich ja im Druckdialog noch mit einem Mausklick von Hand erledigen. Mühsam wäre aber das manuelle Auswählen, das ich gerne automatisieren möchte.
Ich ging davon aus, das gäbe es einen direkten Befehl dafür, scheint aber nicht so einfach zu sein?
Stefan
da hast Du Dir ja viel Mühe gegeben. Eventuell kann ich das auch nochmal gebrauchen, aber es trifft nicht ganz den Kern meines Problems.
Ich will ja bestimmte Blätter per Makro AUSWÄHLEN. Dass nur die ausgewählten Blätter gedruckt werden, kann ich ja im Druckdialog noch mit einem Mausklick von Hand erledigen. Mühsam wäre aber das manuelle Auswählen, das ich gerne automatisieren möchte.
Ich ging davon aus, das gäbe es einen direkten Befehl dafür, scheint aber nicht so einfach zu sein?
Stefan
Re: Mehrere Blättter aktivieren
Hallo Axel,
das schient mir nur schon sehr nahe an der Lösung.
Verstehe ich richtig. dass dein Beispiel so gedacht sind, dass immer nur die Zellen A1 gedruckt werden sollen?
Aber bei meinem Test deines Makros ist die Druckvorschau völlig unbeeindruckt davon was ich vorher in oRanges reinschreibe. Er druckt (anzeigend) immer alle Seiten und alle Inhalte auf den Seiten!?
Dabei habe ich fast nichts geändert an Deinem Code (eine Seite zum Test erfolglos rauskommentiert, vierte Seite wird auch gedruckt)
Stefan
das schient mir nur schon sehr nahe an der Lösung.
Verstehe ich richtig. dass dein Beispiel so gedacht sind, dass immer nur die Zellen A1 gedruckt werden sollen?
Aber bei meinem Test deines Makros ist die Druckvorschau völlig unbeeindruckt davon was ich vorher in oRanges reinschreibe. Er druckt (anzeigend) immer alle Seiten und alle Inhalte auf den Seiten!?
Dabei habe ich fast nichts geändert an Deinem Code (eine Seite zum Test erfolglos rauskommentiert, vierte Seite wird auch gedruckt)
Code: Alles auswählen
Sub Test
dim oRanges
dim oRange
dim oController
dim oDispatcher
oRanges = thiscomponent.createInstance("com.sun.star.sheet.SheetCellRanges")
oRange = thiscomponent.sheets(0).getCellRangeByName("A1")
oRanges.addRangeAddress(oRange.RangeAddress, True)
'oRange = thiscomponent.sheets(1).getCellRangeByName("A1")
'oRanges.addRangeAddress(oRange.RangeAddress, True)
oRange = thiscomponent.sheets(2).getCellRangeByName("A1")
oRanges.addRangeAddress(oRange.RangeAddress, True)
oController = thiscomponent.currentcontroller
oController.select(oRanges)
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oDispatcher.executeDispatch(oController.Frame, ".uno:PrintPreview", "", 0, Array())
End Sub
-
- ****
- Beiträge: 159
- Registriert: So, 17.10.2010 16:54
Re: Mehrere Blättter aktivieren
Hallo delta9,
Folgendes druckt aber tatsächlich die ausgewählten Tabellen (im Beispiel 1 und 3) auf dem Standarddrucker aus, wenn die Standard-Option [x] Ausgewählte Tabellen gesetzt ist.
viele Grüße
Axel
Nein, es wird der Range "Tabelle1.A1;Tabelle2.A1;Tabelle3.A1" in die Selection getan und somit zwangsläufig die drei Blätter ausgewählt.delta9 hat geschrieben:Verstehe ich richtig. dass dein Beispiel so gedacht sind, dass immer nur die Zellen A1 gedruckt werden sollen?
Ja, offensichtlich zeigt Calc in der Seitenansich *immer* alle druckbaren Blätter an, unabhängig von der Auswahl.delta9 hat geschrieben:Aber bei meinem Test deines Makros ist die Druckvorschau völlig unbeeindruckt davon was ich vorher in oRanges reinschreibe. Er druckt (anzeigend) immer alle Seiten und alle Inhalte auf den Seiten!?
Folgendes druckt aber tatsächlich die ausgewählten Tabellen (im Beispiel 1 und 3) auf dem Standarddrucker aus, wenn die Standard-Option [x] Ausgewählte Tabellen gesetzt ist.
Code: Alles auswählen
oRanges = thiscomponent.createInstance("com.sun.star.sheet.SheetCellRanges")
oRange = thiscomponent.sheets(0).getCellRangeByName("A1")
oRanges.addRangeAddress(oRange.RangeAddress, True)
oRange = thiscomponent.sheets(1).getCellRangeByName("A1")
'oRanges.addRangeAddress(oRange.RangeAddress, True)
oRange = thiscomponent.sheets(2).getCellRangeByName("A1")
oRanges.addRangeAddress(oRange.RangeAddress, True)
oController = thiscomponent.currentcontroller
oController.select(oRanges)
thiscomponent.print(array())
Axel