Export to PDF immer nur erstes Tabellenblatt

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

Moderator: Moderatoren

Manu1981
**
Beiträge: 26
Registriert: Mi, 15.04.2015 09:47
Kontaktdaten:

Export to PDF immer nur erstes Tabellenblatt

Beitrag von Manu1981 »

Hallo,

ich versuche seit Stunden mit folgendem Makro das 2. Tabellenblatt (Rechnung) als PDF zu exportieren, erhalte jedoch immer nur das erste Tabellenblatt (Angebot). Der Dateiname wird bei beiden Tabellenblättern aus der Zelle AT2 des entsprechenden Tabellenblatts geholt.

Code: Alles auswählen

REM  *****  BASIC  *****
'=======================================================
Sub ExportSheetAsPdf()
    ExportToPDF ("Rechnung", 0, 0 ,7 ,100)
End Sub

Sub ExportToPDF (sTableNam As String, lngErsteSpalte As Long, lngErsteZeile As Long, lngLetzteSpalte As Long, lngLetzteZeile As Long)
  oDoc = ThisComponent
  oSheets = oDoc.Sheets
  oSheet1  = oDoc.Sheets.getByName(sTableNam)
  oRange = oSheet1.getCellRangeByName("AT2")
  oString = oRange.String
 
 
  sPath = "file:///E:/2 - RECHNUNGSAUSGANG/2018/"
  sFileName= oString & ".pdf"

  ThisComponent.addActionLock
  ThisComponent.LockControllers
  Delete_PrintAreas
   


  Set_PrintAreas (n ,lngErsteSpalte ,lngErsteZeile ,lngLetzteSpalte ,lngLetzteZeile)


  export_pdf(sPath & sFileName) 
  Delete_PrintAreas
  MsgBox "Das PDF wurden erfolgreich erstellt. Vielen Dank mein Schatz, ich liebe Dich!" , 0, "PDF Export"

  Zeile1:
  ThisComponent.UnlockControllers
  ThisComponent.removeActionLock
End sub
Vielleicht weiß ja jemand Rat und kann mir behilflich sein? :)

LG Manu
Mondblatt24
*******
Beiträge: 1136
Registriert: So, 14.05.2017 16:11

Re: Export to PDF immer nur erstes Tabellenblatt

Beitrag von Mondblatt24 »

Hallo,
seit wann braucht man dazu ein Makro?

Datei→ als PDF exportieren→ Auswahl/Ausgewählte Tabelle/n

Gruß Peter
Win 11 (x64) ▪ 24.2.2.2 (x64) ▪ AOO Portable 4.1.15
Wurde die Frage zutreffend beantwortet bitte den Betreff der Eingangsfrage mit [GELÖST] ergänzen. Beschreibung
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Export to PDF immer nur erstes Tabellenblatt

Beitrag von Stephan »

weder ist der Code des Makros "Set_PrintAreas" noch des Makros "export_pdf" aufgeführt, so das man über deren Inhalt nichts sagen kann und mithin auch nicht warum der Export nicht klappt.


Gruß
Stephan
Manu1981
**
Beiträge: 26
Registriert: Mi, 15.04.2015 09:47
Kontaktdaten:

Re: Export to PDF immer nur erstes Tabellenblatt

Beitrag von Manu1981 »

Hallo Peter, Hallo Stephan,

ich möchte mit einem Klick eine entsprechend benannte Angebots- oder Rechnungs-PDF in einem Ordner haben, damit ich diese an eine E-Mail ahängen kann.

@Peter: Datei = > Als PDF exportieren dauert zu lange. Erst recht, wenn man das am Tag 100 mal machen muss.

@Stephan: Das Makro heißt "ExportSheetAsPdf()" - entsprechend dem Code, den ich hier gepostet hatte. Bisher hatte ich immer die "Areas" in der 4. Zeile "ExportToPDF ("Rechnung", 0, 0 ,7 ,100)" angepasst. Spalte 0, Zeile 0 bis Spalte 0, Zeile 100. Soweit ich dachte bezieht sich der Wert vor den Spalten/Zeilen auf das Tabellenblatt "Rechnung"? Liege ich da falsch?

Kriege es einfach nicht gebacken... :(

LG Manu
quotsi
******
Beiträge: 693
Registriert: Do, 14.11.2013 10:04

Re: Export to PDF immer nur erstes Tabellenblatt

Beitrag von quotsi »

Und warum werden immer mehr MAKRO-Probleme hier und nicht im Unterforum Makros und ... veröffentlicht?

OK, verschoben. (Stephan - Moderator)
win11 - Avira - LO 7.5.8.2 (X86_64) - AOO 4.1.14
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Export to PDF immer nur erstes Tabellenblatt

Beitrag von Stephan »

@Stephan: Das Makro heißt "ExportSheetAsPdf()" - entsprechend dem Code, den ich hier gepostet hatte.
ja sicher, aber in diesem Makro werden die zwei von mir genannten Makros aufgerufen, nämlich:

Code: Alles auswählen

Set_PrintAreas (n ,lngErsteSpalte ,lngErsteZeile ,lngLetzteSpalte ,lngLetzteZeile)

export_pdf(sPath & sFileName)


und ohne zu wissen was in diesen Makros steht kann man kaum beantworten warum das Makro "ExportSheetAsPdf()" nicht funktioniert, denn in den Makros "ExportSheetAsPdf()" und "ExportToPDF " ist kein direkt erkennbarer Fehler .


Gruß
Stephan
Manu1981
**
Beiträge: 26
Registriert: Mi, 15.04.2015 09:47
Kontaktdaten:

Re: Export to PDF immer nur erstes Tabellenblatt

Beitrag von Manu1981 »

Und warum werden immer mehr MAKRO-Probleme hier und nicht im Unterforum Makros und ... veröffentlicht?
Bitte entschuldige Quotsi.... :/

@Staphan

Ich dachte nicht, dass das relevant sein könnte... Anbei das komplette Makro.

Code: Alles auswählen

REM  *****  BASIC  *****
'=======================================================


Sub ExportSheetAsPdf()
    ExportToPDF ("Rechnung", 0, 0 ,7 ,100)
End Sub

Sub ExportToPDF (sTableNam As String, lngErsteSpalte As Long, lngErsteZeile As Long, lngLetzteSpalte As Long, lngLetzteZeile As Long)
  oDoc = ThisComponent
  oSheets = oDoc.Sheets
  oSheet1  = oDoc.Sheets.getByName(sTableNam)
  oRange = oSheet1.getCellRangeByName("AT2")
  oString = oRange.String
 
 
  sPath = "file:///E:/2 - RECHNUNGSAUSGANG/2018/"
  sFileName= oString & ".pdf"

  ThisComponent.addActionLock
  ThisComponent.LockControllers
  Delete_PrintAreas
   


  Set_PrintAreas (n ,lngErsteSpalte ,lngErsteZeile ,lngLetzteSpalte ,lngLetzteZeile)


  export_pdf(sPath & sFileName) 
  Delete_PrintAreas
  MsgBox "PDF wurden erfolgreich erstellt." , 0, "PDF Export"

  Zeile1:
  ThisComponent.UnlockControllers
  ThisComponent.removeActionLock
End sub


Sub Delete_PrintAreas()
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0)
    For n =0 to oDoc.Sheets.getCount - 1
        oDoc.Sheets(n).setPrintAreas(Array ())
    Next
End Sub

Sub Set_PrintAreas (nSheet As Integer,lStartCol As Long, lStartRow As Long, _
                    lEndCol As Long, lEndRow As Long)
  Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
      oDoc = ThisComponent
      oSheet = oDoc.Sheets(nSheet)
        oSheets = oDoc.Sheets
        oSheet1  = oDoc.Sheets.getByName("Rechnung")
      CellRangeAddress.Sheet = nSheet
      CellRangeAddress.StartColumn = lStartCol
      CellRangeAddress.StartRow = lStartRow
      CellRangeAddress.EndColumn = lEndCol   
      CellRangeAddress.EndRow = lEndRow
      aPrintAreas()=Array (CellRangeAddress)
      oSheet.setPrintAreas(aPrintAreas())

End sub
'------------------------------------
Function GetLastUsedRow(oSheet as Object) As Integer
  Dim oCell
  Dim oCursor
  Dim aAddress
 
  oCell = oSheet.getCellByPosition(0, 0)
  oCursor = oSheet.createCursorByRange(oCell)
  oCursor.gotoEndOfUsedArea(True)
  aAddress = oCursor.RangeAddress
  GetLastUsedRow = aAddress.EndRow
End Function
REM Returns the number of the last column
'of a continuous data range in a sheet.
Function GetLastUsedColumn(oSheet as Object) As Long
  Dim oCell
  Dim oCursor
  Dim aAddress

  oCell = oSheet.getCellByPosition(0, 0)
  oCursor = oSheet.createCursorByRange(oCell)
  oCursor.gotoEndOfUsedArea(True)
  aAddress = oCursor.RangeAddress
  GetLastUsedColumn = aAddress.EndColumn
End Function
'----------------------------------
 
'------------------------------------
Sub export_pdf (sFileName AS String)

  dim args1(1) as new com.sun.star.beans.PropertyValue

  args1(0).Name = "ExportFormFields" 'just show the contents of the Form.Fields
  args1(0).Value= True
  args1(1).Name = "Printing" ' you don't need that.
  args1(1).Value= 0
'hier können noch weiter Optionen eingegeben werden

  dim args2(2) as new com.sun.star.beans.PropertyValue

  args2(0).Name = "FilterName"
  args2(0).Value = "calc_pdf_Export"
  args2(1).Name = "FilterData"
  args2(1).Value = args1
  args2(2).Name = "SelectionOnly"
  args2(2).Value = true

  ThisComponent.storeToURL(sFileName,args2())
End Sub
Viele Grüße

Manu
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Export to PDF immer nur erstes Tabellenblatt

Beitrag von Toxitom »

Tia Manu,

als erstes würde ich das hier prüfen:

Code: Alles auswählen

...
 args2(2).Name = "SelectionOnly"
  args2(2).Value = true
...
im Makro "export_pdf". Printareas (Druckbereiche) sind keine Selektion, sondern definieren den zu druckenden Bereich. Wenn Du aber "Nur markierte Zellen" wählst - was soll da rauskommen?

VG Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Export to PDF immer nur erstes Tabellenblatt

Beitrag von Stephan »

so, ich habe das hier zusammenkopiert, das es zunächst läuft. Sauberen Code müsstest Du bei Bedarf selbst umsetzen:

Code: Alles auswählen

Sub ExportSheetAsPdf()
    ExportToPDF ("Rechnung", 0, 0 ,7 ,100)
End Sub

Sub ExportToPDF (sTableNam As String, lngErsteSpalte As Long, lngErsteZeile As Long, lngLetzteSpalte As Long, lngLetzteZeile As Long)
  oDoc = ThisComponent
  oSheets = oDoc.Sheets
  oSheet1  = oDoc.Sheets.getByName(sTableNam)
  oRange = oSheet1.getCellRangeByName("AT2")
  oString = oRange.String
 
 
  sPath = "file:///E:/2 - RECHNUNGSAUSGANG/2018/"
  sFileName= oString & ".pdf"
  
  Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
  For n = 0 to oDoc.Sheets.getCount - 1
        oDoc.Sheets(n).setPrintAreas(Array ())
        If oDoc.Sheets(n).Name = sTableNam Then
        CellRangeAddress.Sheet = n
        End If
  Next

  CellRangeAddress.StartColumn = 0
  CellRangeAddress.StartRow = 0
  CellRangeAddress.EndColumn = 7   
  CellRangeAddress.EndRow = 100
  aPrintAreas()=Array(CellRangeAddress)
  oSheet1.setPrintAreas(aPrintAreas())
    
  export_pdf(sPath & sFileName) 

  MsgBox "PDF wurden erfolgreich erstellt." , 0, "PDF Export"

End sub



Sub export_pdf (sFileName AS String)

  dim args1(1) as new com.sun.star.beans.PropertyValue

  args1(0).Name = "ExportFormFields" 'just show the contents of the Form.Fields
  args1(0).Value= True
  args1(1).Name = "Printing" ' you don't need that.
  args1(1).Value= 0
'hier können noch weiter Optionen eingegeben werden

  dim args2(2) as new com.sun.star.beans.PropertyValue

  args2(0).Name = "FilterName"
  args2(0).Value = "calc_pdf_Export"
  args2(1).Name = "FilterData"
  args2(1).Value = args1
  args2(2).Name = "SelectionOnly"
  args2(2).Value = false

  ThisComponent.storeToURL(sFileName,args2())
End Sub

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

Re: Export to PDF immer nur erstes Tabellenblatt

Beitrag von Stephan »

im Makro "export_pdf". Printareas (Druckbereiche) sind keine Selektion, sondern definieren den zu druckenden Bereich. Wenn Du aber "Nur markierte Zellen" wählst - was soll da rauskommen?
Du hast grundsätzlich recht.

Ich hatte das nicht übersehen, aber war mir (ohne es geprüft zu haben) zu 95% sicher das OO das ignoriert. Deswegen und weil der Code insgesamt so 'durcheinander' war, habe ich das stillschweigend übergangen.
Ich habe es jetzt geprüft und OO ignoriert es tatsächlich (getestet AOO 4.1.5). Vielleicht ist LO in diesem Detail schlauer, ich habe das nicht geprüft weil meine neueste LO-Version die ich installiert habe ohnehin nur 6.0.3 ist.

Im gerade geposteten Code habe ich das trotzdem sicherheitshalber auf False gesetzt.


Gruß
Stephan
Manu1981
**
Beiträge: 26
Registriert: Mi, 15.04.2015 09:47
Kontaktdaten:

Re: Export to PDF immer nur erstes Tabellenblatt

Beitrag von Manu1981 »

Vielen Dank Stephan für die funktionierende Lösung! :)
Selbst einen sauberen Code werde ich nie haben, da ich mich hiermit gar nicht auskenne. :(

Hast du vielleicht noch eine Idee, wie ich es hinbekommen könnte, dass die PDF, die ausgespuckt wird, nicht immer 2 Seiten länger ist als gewünscht?
Calc soll ja den Bereich A1 - G100 (was bei mir in Etwa 1,5 Seiten entspricht) in eine PDF umwandeln, aber es sind immer 2 Seiten mehr.
Geht es vll. auch, dass man im Makro keine Druckbereiche angibt sondern Seiten mit Inhalt? (Wenn z.B. 2 Seiten Inhalt haben, dann diese bitte als PDF ausspucken)

Der Hintergrund dieser Geschichte: Ich habe mir ein Angebots-/Rechnungsformular gebastelt, welches je nach Menge der Artikel und Produkttexten unterschiedlich lang ist. Meistens ist es nur eine Seite, manchmal sind es aber auch 1,5 Seiten (Deswegen Zelle G100).
In Zukunft soll auch noch ein Infoblatt an das Angebot/die Rechnung dran, worauf alle Produkte / Dienstleistungen oder auch Angebote zu finden sind.

LG Manu
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Export to PDF immer nur erstes Tabellenblatt

Beitrag von Stephan »

Hast du vielleicht noch eine Idee, wie ich es hinbekommen könnte, dass die PDF, die ausgespuckt wird, nicht immer 2 Seiten länger ist als gewünscht?
Calc soll ja den Bereich A1 - G100 (was bei mir in Etwa 1,5 Seiten entspricht) in eine PDF umwandeln
stelle unter Format-Seite Register "Tabelle" den Skalierungsmodus auf "Druckbereich(e) auf Seitenzahl anpassen" Seitenzahl 2



Gruß
Stephan
Antworten