Seite 1 von 1

Export to PDF immer nur erstes Tabellenblatt

Verfasst: Mi, 12.12.2018 13:35
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

Re: Export to PDF immer nur erstes Tabellenblatt

Verfasst: Mi, 12.12.2018 13:59
von Mondblatt24
Hallo,
seit wann braucht man dazu ein Makro?

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

Gruß Peter

Re: Export to PDF immer nur erstes Tabellenblatt

Verfasst: Mi, 12.12.2018 14:02
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

Re: Export to PDF immer nur erstes Tabellenblatt

Verfasst: Mi, 12.12.2018 16:22
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

Re: Export to PDF immer nur erstes Tabellenblatt

Verfasst: Mi, 12.12.2018 16:29
von quotsi
Und warum werden immer mehr MAKRO-Probleme hier und nicht im Unterforum Makros und ... veröffentlicht?

OK, verschoben. (Stephan - Moderator)

Re: Export to PDF immer nur erstes Tabellenblatt

Verfasst: Mi, 12.12.2018 16:41
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

Re: Export to PDF immer nur erstes Tabellenblatt

Verfasst: Mi, 12.12.2018 17:01
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

Re: Export to PDF immer nur erstes Tabellenblatt

Verfasst: Mi, 12.12.2018 17:42
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

Re: Export to PDF immer nur erstes Tabellenblatt

Verfasst: Mi, 12.12.2018 18:55
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

Re: Export to PDF immer nur erstes Tabellenblatt

Verfasst: Mi, 12.12.2018 19:04
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

Re: Export to PDF immer nur erstes Tabellenblatt

Verfasst: Do, 13.12.2018 16:07
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

Re: Export to PDF immer nur erstes Tabellenblatt

Verfasst: Do, 13.12.2018 16:28
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