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