Dynamischer Druckbereich

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Hammurabi
Beiträge: 6
Registriert: Mi, 19.02.2014 11:43

Dynamischer Druckbereich

Beitrag von Hammurabi »

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.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dynamischer Druckbereich

Beitrag von clag »

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.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Hammurabi
Beiträge: 6
Registriert: Mi, 19.02.2014 11:43

Re: Dynamischer Druckbereich

Beitrag von Hammurabi »

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.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Dynamischer Druckbereich

Beitrag von F3K Total »

Hi,
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
Gruß R
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dynamischer Druckbereich

Beitrag von clag »

Hallo Hammurabi,

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
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Dynamischer Druckbereich

Beitrag von F3K Total »

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
  • Zu druckende Spalten seinen Spalte A bis E
  • längenbestimmend: Spalte B
Vorgehen
  • Schreibe in eine Zelle deiner Wahl (hier verwendet F2) diese Formel zu Bestimmung der letzten gefüllten Zelle in Spalte B

    Code: Alles auswählen

    =MAX(WENN(NICHT(ISTLEER(B2:B1000));ZEILE(B2:B1000);0))
    und 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))}
  • 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 G2

    Code: Alles auswählen

    =PRINTAREA(0;0;4;F2-1)
    F2 entspricht in dieser Formel, der Zelle, in der die Matrixformel steht.
  • fertig
Mit der Matrixformel wird im Bereich bis Zeile 1000 die Zeilennummer der untersten gefüllte Zelle ermittelt.
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
Viel Erfolg
Gruß R
Zuletzt geändert von F3K Total am Do, 20.02.2014 21:10, insgesamt 1-mal geändert.
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Dynamischer Druckbereich

Beitrag von lorbass »

F3K Total hat geschrieben:Formel zu Bestimmung der letzten gefüllten Zelle in Spalte B
Ä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.

Gruß
lorbass
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Dynamischer Druckbereich

Beitrag von F3K Total »

Moin lorbass,
Hammurabi hat geschrieben:Die Formeln von Wochentag und Zeit Differenz sind bereits bis Zeile 1000 vorbereitet damit man sie nicht runterziehen muss.
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.
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
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dynamischer Druckbereich

Beitrag von clag »

Moin zusammen,

hier mal meine "simple and easy" Lösung wie oben beschrieben als Beispieldatei
Daten_in_druckbereich_filtern+drucken.ods
(15.17 KiB) 444-mal heruntergeladen
viel Spaß
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Hammurabi
Beiträge: 6
Registriert: Mi, 19.02.2014 11:43

Re: Dynamischer Druckbereich

Beitrag von Hammurabi »

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?
Dateianhänge
BerechnungsTabelle.ods
(17.18 KiB) 87-mal heruntergeladen
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dynamischer Druckbereich

Beitrag von clag »

Hallo Hammurabi,
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?
weil du in den Druckeinstellungen/Option immer noch ein ein angekreuztes " [x] nur ausgewählte Tabellen drucken" stehen hast.
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())
auf

Code: Alles auswählen

dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())
oder nimmst dieses Beispiel
Daten_in_druckbereich_filtern+druckmenue.ods
(15.17 KiB) 92-mal heruntergeladen
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dynamischer Druckbereich

Beitrag von clag »

Hallo,

hier deine Eigene Beispieldatei mit Print Button
2_63422_BerechnungsTabelle+Button.ods
(17.23 KiB) 134-mal heruntergeladen
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Hammurabi
Beiträge: 6
Registriert: Mi, 19.02.2014 11:43

Re: Dynamischer Druckbereich

Beitrag von Hammurabi »

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.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dynamischer Druckbereich

Beitrag von clag »

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.
Druckbereich_04.png
Druckbereich_04.png (13.91 KiB) 3053 mal betrachtet
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
Hammurabi
Beiträge: 6
Registriert: Mi, 19.02.2014 11:43

Re: Dynamischer Druckbereich

Beitrag von Hammurabi »

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.
Antworten