Dynamischer Druckbereich
Moderator: Moderatoren
Dynamischer Druckbereich
Hallo,
mein Problem besteht darin das ich eine Tabelle habe:
Datum|Wochentag|Zeit von|Zeit bis|Zeit Differenz|Tätigkeit
Datum = Manuelle Eingabe
Wochentag = Datum (=Datum) mit Formatierung zeige Wochentag
Zeit von = Manuelle Eingabe 00:00
Zeit bis = Manuelle Eingabe 00:00
Zeit Differenz = Formel (=Zeit bis - Zeit von)
Tätigkeit = Manuelle Eingabe z.B. OpenOffice Mappe erstellen
Die Formeln von Wochentag und Zeit Differenz sind bereits bis Zeile 1000 vorbereitet damit man sie nicht runterziehen muss.
Nun habe ich allerdings das Problem das er alle 1000 Zeilen druckt und nicht nur die ersten 100 die befüllt sind.
Die Formeln habe ich bereits mit einer wenn Anweisung erweitert =WENN(Datum;Datum;"") nun sind sie Optisch leer allerdings gedruckt werden sie immer noch.
Da ich leider nichts brauchbares oder verständliches gefunden habe, dass nur die Befüllten ersten 100 Zeilen gedruckt werden, bin ich auf die Idee gekommen mit =999-ANZAHLLEEREZELLEN(A2:A1000) die Anzahl der befüllten Zeilen heraus zu bekommen.
Nun müsste ich den Druckbereich nur noch auf diese anzahl eingrenzen allerdings scheitert es dabei bei mir, da ich mit mit Macros usw nicht auskenne.
Wäre um jede Hilfe dankbar ggf. auch einen anderen Lösungsansatz.
mein Problem besteht darin das ich eine Tabelle habe:
Datum|Wochentag|Zeit von|Zeit bis|Zeit Differenz|Tätigkeit
Datum = Manuelle Eingabe
Wochentag = Datum (=Datum) mit Formatierung zeige Wochentag
Zeit von = Manuelle Eingabe 00:00
Zeit bis = Manuelle Eingabe 00:00
Zeit Differenz = Formel (=Zeit bis - Zeit von)
Tätigkeit = Manuelle Eingabe z.B. OpenOffice Mappe erstellen
Die Formeln von Wochentag und Zeit Differenz sind bereits bis Zeile 1000 vorbereitet damit man sie nicht runterziehen muss.
Nun habe ich allerdings das Problem das er alle 1000 Zeilen druckt und nicht nur die ersten 100 die befüllt sind.
Die Formeln habe ich bereits mit einer wenn Anweisung erweitert =WENN(Datum;Datum;"") nun sind sie Optisch leer allerdings gedruckt werden sie immer noch.
Da ich leider nichts brauchbares oder verständliches gefunden habe, dass nur die Befüllten ersten 100 Zeilen gedruckt werden, bin ich auf die Idee gekommen mit =999-ANZAHLLEEREZELLEN(A2:A1000) die Anzahl der befüllten Zeilen heraus zu bekommen.
Nun müsste ich den Druckbereich nur noch auf diese anzahl eingrenzen allerdings scheitert es dabei bei mir, da ich mit mit Macros usw nicht auskenne.
Wäre um jede Hilfe dankbar ggf. auch einen anderen Lösungsansatz.
Re: Dynamischer Druckbereich
Hallo Hammurabi,
eine sehr einfache und wirksamen Methode wäre vor dem Drucken das Filtern mit dem Standartfilter
auf die entsprechende Spalte angesetzt zB mit Kriterium ">0"
dann wird der leere Rattenschwanz ausgeblendet, und auch nicht gedruckt.
eine sehr einfache und wirksamen Methode wäre vor dem Drucken das Filtern mit dem Standartfilter
auf die entsprechende Spalte angesetzt zB mit Kriterium ">0"
dann wird der leere Rattenschwanz ausgeblendet, und auch nicht gedruckt.
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Dynamischer Druckbereich
Hallo clag,
danke für deine Antwort. Diese Lösung hatte ich auch schon gefunden. Leider wäre das für mich aber nicht einsetzbar, da es für die meisten Mitarbeiter, die diese Tabelle befüllen sollen, schon zu viel Aufwand wäre oder sie würden es schlicht weg vergessen den filter vorm drucken zu aktivieren.
danke für deine Antwort. Diese Lösung hatte ich auch schon gefunden. Leider wäre das für mich aber nicht einsetzbar, da es für die meisten Mitarbeiter, die diese Tabelle befüllen sollen, schon zu viel Aufwand wäre oder sie würden es schlicht weg vergessen den filter vorm drucken zu aktivieren.
Re: Dynamischer Druckbereich
Hi,
dieses Makro an das Tabellenereignis "Inhalt geändert" gehängt, setzt den Druckbereich auf dem aktiven Tabellenblatt, hier mal bis Zeile 367.
Gruß R
dieses Makro an das Tabellenereignis "Inhalt geändert" gehängt, setzt den Druckbereich auf dem aktiven Tabellenblatt, hier mal bis Zeile 367.
Code: Alles auswählen
const nPrintStartColumn = 0' "A"
const nPrintEndColumn = 2'"C"
const nPrintMaxColumn = 1' "B" hier wird die letzte gefüllte Zelle gesucht
const nPrintMaxRow = 366 'und zwar von unten, ab dieser Zeile + 1
sub set_Printarea
dim oPrintareas(0) as new com.sun.star.table.CellRangeAddress
osheet = thiscomponent.currentController.activesheet
oMaxRange = osheet.getcellrangebyposition(nPrintMaxColumn,0,nPrintMaxColumn,nPrintMaxRow)
aMaxFormulaArray = oMaxRange.Formulaarray
for i = nPrintMaxRow to 0 step - 1
if aMaxFormulaArray(i)(0) > "" then
nendrow = i
exit for
endif
next i
with oPrintareas(0)
.sheet = osheet.rangeaddress.sheet
.Startcolumn = nPrintStartColumn
.Startrow = 0
.Endcolumn = nPrintEndColumn
.Endrow = i
end with
osheet.setprintareas(oPrintareas)
End sub
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Dynamischer Druckbereich
Hallo Hammurabi,
dann
na toll, dann schreib das doch bitte gleich
andere Variante ist ist ein persistenter Standardfilter der auf ein anderes Tabellen-Blatt ausgibt.
Auf dieser Tabelle wird ein passender Druckbereich festgelegt. A1:H2000
In den Druckoptionen wird festgelegt ganzes Dokument drucken.
Dann zeichnest du ein kleines Makro auf welches:
"das aktualisieren des persistenten Filter und
danach den Klick auf die "Datei direkt Drucken" Schaltfläche enthält"
Dann fügst du noch eine Schaltfläche auf dein Hauptblatt und verknüpfst die mit dem Makro.
Fertig.
ein Klick auf den Button und die Daten des aktuell genutzten Bereiches werden gedruckt.
dann
Hammurabi hat geschrieben: Diese Lösung hatte ich auch schon gefunden.
na toll, dann schreib das doch bitte gleich
andere Variante ist ist ein persistenter Standardfilter der auf ein anderes Tabellen-Blatt ausgibt.
Auf dieser Tabelle wird ein passender Druckbereich festgelegt. A1:H2000
In den Druckoptionen wird festgelegt ganzes Dokument drucken.
Dann zeichnest du ein kleines Makro auf welches:
"das aktualisieren des persistenten Filter und
danach den Klick auf die "Datei direkt Drucken" Schaltfläche enthält"
Dann fügst du noch eine Schaltfläche auf dein Hauptblatt und verknüpfst die mit dem Makro.
Fertig.
ein Klick auf den Button und die Daten des aktuell genutzten Bereiches werden gedruckt.
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Dynamischer Druckbereich
Hallo,
hier noch eine, wie ich finde, deutlich elegantere Methode als mein erster Vorschlag, vergleiche auch mit diesem Beitrag von Stephan, weil man kein Makro an ein Tabellenereignis binden muss.
Annahmen
Dann mit der Function der Druckbereich über die Spalten A bis E gesetzt
Gruß R
hier noch eine, wie ich finde, deutlich elegantere Methode als mein erster Vorschlag, vergleiche auch mit diesem Beitrag von Stephan, weil man kein Makro an ein Tabellenereignis binden muss.
Annahmen
- Zu druckende Spalten seinen Spalte A bis E
- längenbestimmend: Spalte B
- Schreibe in eine Zelle deiner Wahl (hier verwendet F2) diese Formel zu Bestimmung der letzten gefüllten Zelle in Spalte Bund schließe die Formel mit STRG+SHIFT+ENTER ab, um eine Matrixformel zu erzeugen, sie sollte dann so aussehen:
Code: Alles auswählen
=MAX(WENN(NICHT(ISTLEER(B2:B1000));ZEILE(B2:B1000);0))
Code: Alles auswählen
{=MAX(WENN(NICHT(ISTLEER(B2:B1000));ZEILE(B2:B1000);0))}
- Kopiere die Function PRINTAREA ins Dokument oder in "Meine Makros" in die Bibliothek Standard (zwingend)
Code: Alles auswählen
Function PRINTAREA(StartSpalte, StartZeile, EndSpalte, EndZeile) Dim Druckbereich(0) as new com.sun.star.table.CellRangeAddress Druckbereich(0).StartColumn = StartSpalte Druckbereich(0).StartRow = StartZeile Druckbereich(0).EndColumn = EndSpalte Druckbereich(0).EndRow = EndZeile if not isnull(ThisComponent.currentcontroller) then With ThisComponent.currentcontroller.activeSheet .setPrintareas(Druckbereich()) End With end if End Function
- Schreibe nun diese Formel in z.B. Zelle G2F2 entspricht in dieser Formel, der Zelle, in der die Matrixformel steht.
Code: Alles auswählen
=PRINTAREA(0;0;4;F2-1)
- fertig
Dann mit der Function der Druckbereich über die Spalten A bis E gesetzt
- 0;0 entspricht dabei den Koordinaten der Zelle A1, oberste linke Zelle
- 4;F2-1 entspricht den Koordinaten der unteren rechten Zelle des Druckbereiches in Spalte E
Gruß R
Zuletzt geändert von F3K Total am Do, 20.02.2014 21:10, insgesamt 1-mal geändert.
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Dynamischer Druckbereich
Änderungsvorschlag: Wo doch der eigentliche Kern der Sache, nämlich die dynamische Bestimmung des Druckbereiches, per Makro gelöst wird, bietet es sich an, die Ermittlung der unteren und rechten Grenze damit zu integrieren. Wie's geht, hat (mal wieder) Michael Dannenhöfers in seinen StarBasic / OpenOffice.org Basic FAQ, dort im Abschnitt 7.3.14 Wie kann man die letzte verwendete Zeile/Spalte ermitteln? beschrieben.F3K Total hat geschrieben:Formel zu Bestimmung der letzten gefüllten Zelle in Spalte B
Gruß
lorbass
Re: Dynamischer Druckbereich
Moin lorbass,
Ein Lösung ohne Matrix-Formel hatte ich bereits zwei Beiträge höher vorgeschlagen, allerdings ohne Cursor, weil der nicht in einem Bereich zu erzeugen ist. Die Matrixformel wird in der mir eleganter erscheinenden Lösung zur Auslösung der function verwendet, damit man auf das Tabellenereignis "Inhalt geändert" verzichten kann.
Gruß R
Damit geht dein Änderungsvorschlag nicht, das war doch gerade die Herausforderung an dieser Fragestellung. Die unterste Zeile des Druckbereiches soll anhand eines Bereiches/einer Spalte ermittelt werden, der schmaler als die Druckbereichbreite ist.Hammurabi hat geschrieben:Die Formeln von Wochentag und Zeit Differenz sind bereits bis Zeile 1000 vorbereitet damit man sie nicht runterziehen muss.
Ein Lösung ohne Matrix-Formel hatte ich bereits zwei Beiträge höher vorgeschlagen, allerdings ohne Cursor, weil der nicht in einem Bereich zu erzeugen ist. Die Matrixformel wird in der mir eleganter erscheinenden Lösung zur Auslösung der function verwendet, damit man auf das Tabellenereignis "Inhalt geändert" verzichten kann.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Dynamischer Druckbereich
Moin zusammen,
hier mal meine "simple and easy" Lösung wie oben beschrieben als Beispieldatei
viel Spaß
hier mal meine "simple and easy" Lösung wie oben beschrieben als Beispieldatei
viel Spaß
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Dynamischer Druckbereich
Danke für die vielen Antworten.
Wie ich schon im ersten Beitrag geschrieben habe überfordern mich Macros in LibreOffice etwas -.-"
Zum besseren Verständnis was genau mein Problem ist, habe ich auch noch eine Beispieldatei angehängt(mit nur einem Monat es sind im fertigem natürlich alle Monate des Jahres drin). Es soll nicht nur die Tabelle Gedruckt werden sondern auch als Erste Seite die Monatsübersicht der Stunden.
Also prinzipiell zeigt die Druckvorschau genau das was ich benötige bis auf die Lehrseiten.
Ein Druckknopf wäre in Ordnung allerdings muss die Auswahl des Druckers möglich sein(also nicht immer Standarddrucke).
Nun einmal erklärt warum ich nicht durchblicke bei den Macros:
- Startbereich/Endbereich wie gebe ich diesen ein? Koordinaten(0,0) oder A1
- Warum würde meine Idee nicht funktionieren den druck bereich eingrenzen bis Zeile x durch meine Formel von oben?
- Warum sollte ich diese extra Spalte machen um die letzte spalte heraus zu bekommen? kann man im Makro nicht != NULL prüfen?
PS: in clag's Tabelle kommt ein Fehler(Es sind keine Seiten für den Druck verfügbar. Prüfen Sie ihr Dokument auf druck-relevante Inhalte.) beim drucken warum?
Wie ich schon im ersten Beitrag geschrieben habe überfordern mich Macros in LibreOffice etwas -.-"
Zum besseren Verständnis was genau mein Problem ist, habe ich auch noch eine Beispieldatei angehängt(mit nur einem Monat es sind im fertigem natürlich alle Monate des Jahres drin). Es soll nicht nur die Tabelle Gedruckt werden sondern auch als Erste Seite die Monatsübersicht der Stunden.
Also prinzipiell zeigt die Druckvorschau genau das was ich benötige bis auf die Lehrseiten.
Ein Druckknopf wäre in Ordnung allerdings muss die Auswahl des Druckers möglich sein(also nicht immer Standarddrucke).
Nun einmal erklärt warum ich nicht durchblicke bei den Macros:
- Startbereich/Endbereich wie gebe ich diesen ein? Koordinaten(0,0) oder A1
- Warum würde meine Idee nicht funktionieren den druck bereich eingrenzen bis Zeile x durch meine Formel von oben?
- Warum sollte ich diese extra Spalte machen um die letzte spalte heraus zu bekommen? kann man im Makro nicht != NULL prüfen?
PS: in clag's Tabelle kommt ein Fehler(Es sind keine Seiten für den Druck verfügbar. Prüfen Sie ihr Dokument auf druck-relevante Inhalte.) beim drucken warum?
- Dateianhänge
-
- BerechnungsTabelle.ods
- (17.18 KiB) 87-mal heruntergeladen
Re: Dynamischer Druckbereich
Hallo Hammurabi,
Das gibt es zweimal
1. Menü_Extras_Einstellungen_OOCalc_Drucken
2. Menü_Datei Druckereinstellungen
Und wenn du die Druckermenü sehen willst, brauchst du nur eine Zeile im Makro ändern
von
auf
oder nimmst dieses Beispiel
weil du in den Druckeinstellungen/Option immer noch ein ein angekreuztes " [x] nur ausgewählte Tabellen drucken" stehen hast.Hammurabi hat geschrieben:in clag's Tabelle kommt ein Fehler(Es sind keine Seiten für den Druck verfügbar. Prüfen Sie ihr Dokument auf druck-relevante Inhalte.) beim drucken warum?
Das gibt es zweimal
1. Menü_Extras_Einstellungen_OOCalc_Drucken
2. Menü_Datei Druckereinstellungen
Und wenn du die Druckermenü sehen willst, brauchst du nur eine Zeile im Makro ändern
von
Code: Alles auswählen
dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())
Code: Alles auswählen
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Dynamischer Druckbereich
Hallo,
hier deine Eigene Beispieldatei mit Print Button
hier deine Eigene Beispieldatei mit Print Button
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Dynamischer Druckbereich
Hallo clag,
wenn ich bei deiner Lösung das Seitentabellenblatt ausblende und dann das mit den Bruchbereichen richtig einrichte funktioniert ja schon mal das drucken der Zeiten.
Aber die Übersicht der Zusammengerechneten seiten erscheint nicht.
Auch zu bedenken ist das in der Mappe die Zeiten Aller Monate eines Jahres sein sollen, zum testen habe ich jetzt nur einen Monat drin.
wenn ich bei deiner Lösung das Seitentabellenblatt ausblende und dann das mit den Bruchbereichen richtig einrichte funktioniert ja schon mal das drucken der Zeiten.
Aber die Übersicht der Zusammengerechneten seiten erscheint nicht.
Auch zu bedenken ist das in der Mappe die Zeiten Aller Monate eines Jahres sein sollen, zum testen habe ich jetzt nur einen Monat drin.
Re: Dynamischer Druckbereich
Hallo Hammurabi,
da kann ich nur nochmal sagen drucken aller Tabellen erlauben!
Wenn ich über den Button den Druckvorgang anstoße öffnet sich das Druckermenü
und es werden 3 Seite zum Drucken angezeigt eine aus der Haupttabelle und zwei aus dem gefilterten Bereich,
ergänze ich die Sammeldaten wird dort gegebene Falls ein zweites Blatt gedruckt.
das das bei dir nicht funktioniert wundert mich,
die ausgeblendete Tabelle hat auch keinen Einfluss auf das Druckergebnis.
da kann ich nur nochmal sagen drucken aller Tabellen erlauben!
Wenn ich über den Button den Druckvorgang anstoße öffnet sich das Druckermenü
und es werden 3 Seite zum Drucken angezeigt eine aus der Haupttabelle und zwei aus dem gefilterten Bereich,
ergänze ich die Sammeldaten wird dort gegebene Falls ein zweites Blatt gedruckt.
das das bei dir nicht funktioniert wundert mich,
die ausgeblendete Tabelle hat auch keinen Einfluss auf das Druckergebnis.
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Dynamischer Druckbereich
Ja genau ich sagte ja das das funktioniert allerdings habe ich ja mehrere Tabellen Blätter also Januar, Februar(nur im test enthalten), März, ...., Dezember und er würde mir ja dann immer alle drucken was nicht gewollt ist.
Ich möchte ja nur einen Monat mit Zusammenfassung und der "Detail Spalte" Drucken und das ist ja so mit deiner Lösung nicht möglich da ich immer alle Monates Zusammenfassungen drucken würde und die "Details" des Monats wo ich auf den Knopf drücke.
Ich möchte ja nur einen Monat mit Zusammenfassung und der "Detail Spalte" Drucken und das ist ja so mit deiner Lösung nicht möglich da ich immer alle Monates Zusammenfassungen drucken würde und die "Details" des Monats wo ich auf den Knopf drücke.