calc - pdf, mehrerer Tabellenblätter in eine PDF
Moderator: Moderatoren
calc - pdf, mehrerer Tabellenblätter in eine PDF
Hallo zusammen,
ich weiß Thema pdf mit calc wurde hier und woanders im Netz schon unendlich behandelt, probiere auch schon einige Tage.....
Zuerst konnte ich nur die gesamte calc-Datei in pdf umwandeln, jetzt mittlerweile auch ein einzelnes Tabellenblatt (Programmcode aus dem www), nach Änderung funktioniert es fast so wie gewollt, nur das weitere bekomm ich irgendwie nicht hin, bzw. kann es nicht passend umsetzen.
Habe ein bzw. mehrere Tabellenblätter für die Eingaben, damit "fülle" ich die Tabellenblätter (Ausgabe und Protokoll, und evtl. Ausgabe_2 (jeweils eine DIN A4 Hochformat Seite)) die ich als eine pdf-Datei speichern möchte (Name der pdf-Datei und Pfad habe ich hinbekommen zu ändern), was mir nicht gelingt ist das ich ein zweites Tabellenblatt in das pdf mit anhängen kann, bzw. zusammen umwandele.
Hänge "meine" Version hier mal ran, hoffe mir kann jemand erklären wie bzw. was ich wo ändern muss
Vielen Dank schon mal im vorraus
Gruß Dirk
ich weiß Thema pdf mit calc wurde hier und woanders im Netz schon unendlich behandelt, probiere auch schon einige Tage.....
Zuerst konnte ich nur die gesamte calc-Datei in pdf umwandeln, jetzt mittlerweile auch ein einzelnes Tabellenblatt (Programmcode aus dem www), nach Änderung funktioniert es fast so wie gewollt, nur das weitere bekomm ich irgendwie nicht hin, bzw. kann es nicht passend umsetzen.
Habe ein bzw. mehrere Tabellenblätter für die Eingaben, damit "fülle" ich die Tabellenblätter (Ausgabe und Protokoll, und evtl. Ausgabe_2 (jeweils eine DIN A4 Hochformat Seite)) die ich als eine pdf-Datei speichern möchte (Name der pdf-Datei und Pfad habe ich hinbekommen zu ändern), was mir nicht gelingt ist das ich ein zweites Tabellenblatt in das pdf mit anhängen kann, bzw. zusammen umwandele.
Hänge "meine" Version hier mal ran, hoffe mir kann jemand erklären wie bzw. was ich wo ändern muss
Vielen Dank schon mal im vorraus
Gruß Dirk
Re: calc - pdf, mehrerer Tabellenblätter in eine PDF
Willst Du unsere Aufmerksamkeit testen?
Wenn Du folgenden Code ausführst:
Wird logischerweise nur das Tabellenblatt namens "Ausgabe" ins PDF übernommen, denn der Code definiert genauso die Druckbereiche.
Wenn Du 2 Blätter drucken willst definiere auch die Druckbereiche für 2 Blätter.
Gruß
Stephan
Wenn Du folgenden Code ausführst:
Code: Alles auswählen
Sub Main
ExportToPDF ("Ausgabe")
'ExportToPDF ("Protokoll")
end sub
Sub ExportToPDF (sTableNam As String)
'...
'Delete_PrintAreas
For n = 0 To oSheets.getCount - 1
oSheet=oDoc.Sheets(n)
if oSheet.Name= sTableNam Then
lEndCol= GetLastUsedColumn(oSheet1)
lEndRow=GetLastUsedRow(oSheet1)
'Set_PrintAreas (n ,0 ,0 ,lEndCol ,lEndRow)
End if
'...
End Sub
Wenn Du 2 Blätter drucken willst definiere auch die Druckbereiche für 2 Blätter.
Code: Alles auswählen
Sub Main
ExportToPDF ("Ausgabe", "Protokoll")
'ExportToPDF ("Protokoll")
end sub
Sub ExportToPDF (sTableNam1 As String, sTableNam2 As String)
'...
oSheet1 =oDoc.Sheets.getByName(sTableNam1)
oSheet2 =oDoc.Sheets.getByName(sTableNam2)
Delete_PrintAreas
For n = 0 To oSheets.getCount - 1
oSheet=oDoc.Sheets(n)
if oSheet.Name= sTableNam1 Then
lEndCol= GetLastUsedColumn(oSheet1)
lEndRow=GetLastUsedRow(oSheet1)
Set_PrintAreas (n ,0 ,0 ,lEndCol ,lEndRow)
ElseIf oSheet.Name= sTableNam2 Then
lEndCol= GetLastUsedColumn(oSheet2)
lEndRow=GetLastUsedRow(oSheet2)
Set_PrintAreas (n ,0 ,0 ,lEndCol ,lEndRow)
End if
Next
' ...
End Sub
Gruß
Stephan
Re: calc - pdf, mehrerer Tabellenblätter in eine PDF
Hallo Stephan,
erst einmal danke für Deine Hilfe
- mit nichten, pdf-Druckbereiche und das ganze im makro ist für mich irgendwie nen Buch mit sieben Siegeln
da aus dem großen WWW kopiert, könnte man genauso gut sagen: denn er (ich) weiß nicht was er tut
leider läuft das mit Deinen Änderungen auch noch nicht, einmal ist eine Exception aufgetreten, jetzt bekomme ich die Fehlermeldung
Basic Laufzeitfehler - Objectvariable nicht belegt
in der Zeile
For n = 0 To oSheets.getCount - 1
hatte vermutet das liegt am s des oSheets weil die Variablen doch oSheet1 bzw. 2 heißen, aber zum Erfolg brachte mich das auch nicht.
Kannst Du bitte nochmal schauen was ich falsch mache - danke
Gruß Dirk
erst einmal danke für Deine Hilfe
- mit nichten, pdf-Druckbereiche und das ganze im makro ist für mich irgendwie nen Buch mit sieben Siegeln
da aus dem großen WWW kopiert, könnte man genauso gut sagen: denn er (ich) weiß nicht was er tut
leider läuft das mit Deinen Änderungen auch noch nicht, einmal ist eine Exception aufgetreten, jetzt bekomme ich die Fehlermeldung
Basic Laufzeitfehler - Objectvariable nicht belegt
in der Zeile
For n = 0 To oSheets.getCount - 1
hatte vermutet das liegt am s des oSheets weil die Variablen doch oSheet1 bzw. 2 heißen, aber zum Erfolg brachte mich das auch nicht.
Kannst Du bitte nochmal schauen was ich falsch mache - danke
Gruß Dirk
Re: calc - pdf, mehrerer Tabellenblätter in eine PDF
mutmaßlich verwendet Du nicht den vollständigen Code, sondern nur die Teile die ich hier gepostet habe? Die "'..." in meinen Beispielen sind doch Stellen wo der Code der schon in Deiner Datei steht zu ergänzen ist.Kannst Du bitte nochmal schauen was ich falsch mache - danke
Insgesamt also:
Code: Alles auswählen
Sub ExportToPDF (sTableNam1 As String, sTableNam2 As String)
oDTDoc = thisComponent
oDTsheet = oDTDoc.sheets.getByName("Eingabe")
oDTcell = oDTsheet.getcellrangebyname ("G11")
sPath = "file:///C:/Testnet/" 'Zielordner indem gespeichert wird
sName= oDTcell.string & Format(Now,"dd.mm.yyyy") ' Namenvergabe des zu erstellenden pdfs
sFileName= sName & ".pdf"
If FileExists(sPath & sFileName) then
nVar=MsgBox ("Die Datei existiert bereits. " & Chr(10) & _
" " & Chr(10) & _
Chr(10) & _
" Soll die Datei wirklich überschrieben werden ??? " & Chr(10) & _
" " & Chr(10) & _
"Wenn Sie auf ""Abbrechen"" klicken," & Chr(10) & _
"wird der pdf-Export abgebrochen."& _
Chr(10) & " " & Chr(10), 1, " !!! Achtung !!! ")
Select Case nVar
Case 2 'Abbrechen wurde gedrückt
goTo Zeile1
End Select
end if
ThisComponent.addActionLock
ThisComponent.LockControllers
oDoc = ThisComponent
oSheets = oDoc.Sheets
oSheet1 =oDoc.Sheets.getByName(sTableNam1)
oSheet2 =oDoc.Sheets.getByName(sTableNam2)
Delete_PrintAreas
For n = 0 To oSheets.getCount - 1
oSheet=oDoc.Sheets(n)
if oSheet.Name= sTableNam1 Then
lEndCol= GetLastUsedColumn(oSheet1)
lEndRow=GetLastUsedRow(oSheet1)
Set_PrintAreas (n ,0 ,0 ,lEndCol ,lEndRow)
ElseIf oSheet.Name= sTableNam2 Then
lEndCol= GetLastUsedColumn(oSheet2)
lEndRow=GetLastUsedRow(oSheet2)
Set_PrintAreas (n ,0 ,0 ,lEndCol ,lEndRow)
End if
Next
export_pdf(sPath & sFileName)
Delete_PrintAreas
MsgBox "Das PDF wurden erfolgreich erstellt." , 0, "PDF Export"
Zeile1:
ThisComponent.UnlockControllers
ThisComponent.removeActionLock
End Sub
Gruß
Stephan
Re: calc - pdf, mehrerer Tabellenblätter in eine PDF
Hallo Stephan,
hatte das glaub ich zumindest richtig verstanden, und versucht eigentlich so umzusetzen.......
.....mhmmm, werde dem noch näher auf den Grund gehen
jedenfalls funktioniert es jetzt so weit ich es schon testen konnte wunderbar, vielen Dank
hätte da noch ne Frage zu dem Code bzw. Druckbereiche, damit ich da vielleicht jemals richtig durchblicke, könnte ich den Code so ändern,
dass ich die Druckbereiche beispielsweise mit (von) "A1" bis "K34" ändere, irgendwie versteh ich bei dem Code nicht woher er
Anfang (ok, wird wohl A1 sein) und Ende herausbekommt.
Aber Dir noch einmal vielen Dank für Deine Mühen, werde jetzt erst mal auf "interne Fehlersuche" gehen
Gruß Dirk
hatte das glaub ich zumindest richtig verstanden, und versucht eigentlich so umzusetzen.......
.....mhmmm, werde dem noch näher auf den Grund gehen
jedenfalls funktioniert es jetzt so weit ich es schon testen konnte wunderbar, vielen Dank
hätte da noch ne Frage zu dem Code bzw. Druckbereiche, damit ich da vielleicht jemals richtig durchblicke, könnte ich den Code so ändern,
dass ich die Druckbereiche beispielsweise mit (von) "A1" bis "K34" ändere, irgendwie versteh ich bei dem Code nicht woher er
Anfang (ok, wird wohl A1 sein) und Ende herausbekommt.
Aber Dir noch einmal vielen Dank für Deine Mühen, werde jetzt erst mal auf "interne Fehlersuche" gehen
Gruß Dirk
Re: calc - pdf, mehrerer Tabellenblätter in eine PDF
Es steht doch alles im Makro:
CellRangeAddress.Sheet = nSheet --> Blattindex (beginnend bei 0)
CellRangeAddress.StartColumn = lStartCol -->Startspalte, d.h. Spaltenindex der linken oberen Zelle des Bereichs
CellRangeAddress.StartRow = lStartRow -->Startzeile, d.h. Zeilenindex der linken oberen Zelle des Bereichs
CellRangeAddress.EndColumn = lEndCol -->Endspalte d.h. Spaltenindex der rechten unteren Zelle des Bereichs
CellRangeAddress.EndRow = lEndRow -->Endzeile d.h. Zeilenindex der rechten unteren Zelle des Bereichs
1--> Index 0
K-->Index 10
34-->Index 33
also:
wobei für n der gewünschte Blattindex eingesetzt werden muss, das Blatt das ganz links sichtbar ist hat 0
Gruß
Stephan
Code: Alles auswählen
Sub Set_PrintAreas (nSheet As Integer,lStartCol As Long,_
lStartRow As Long,lEndCol As Long,lEndRow As Long) 'Drukbereich festlegen
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
oDoc = ThisComponent
oSheet = oDoc.Sheets(nSheet)
CellRangeAddress.Sheet = nSheet
CellRangeAddress.StartColumn = lStartCol
CellRangeAddress.StartRow = lStartRow
CellRangeAddress.EndColumn = lEndCol
CellRangeAddress.EndRow = lEndRow
aPrintAreas()=Array (CellRangeAddress)
oSheet.setPrintAreas(aPrintAreas())
End Sub
CellRangeAddress.StartColumn = lStartCol -->Startspalte, d.h. Spaltenindex der linken oberen Zelle des Bereichs
CellRangeAddress.StartRow = lStartRow -->Startzeile, d.h. Zeilenindex der linken oberen Zelle des Bereichs
CellRangeAddress.EndColumn = lEndCol -->Endspalte d.h. Spaltenindex der rechten unteren Zelle des Bereichs
CellRangeAddress.EndRow = lEndRow -->Endzeile d.h. Zeilenindex der rechten unteren Zelle des Bereichs
A --> Index 0Druckbereiche beispielsweise mit (von) "A1" bis "K34" ändere
1--> Index 0
K-->Index 10
34-->Index 33
also:
Code: Alles auswählen
Set_PrintAreas (n, 0, 0, 10, 33)
Gruß
Stephan
Re: calc - pdf, mehrerer Tabellenblätter in eine PDF
Hallo Stephan,
hee, cool, dass nenn ich mal ne Erklärung - vielen Dank, wieder ne Masse gelernt heut
Mit dieser Indexierung muss ich auch noch besser umgehen lernen........
Hatte mir übrigens den Fehler selbst eingebaut, hatte (vermutlich) anstatt den Code zu überschreiben, nur auf einfügen geklickt, und somit stand Dein Code und der alte Code im Makro
Vielen Dank für Deine Erläuterungen und Deine Hilfe, hat "mein" Projekt doch ganz schön weiter gebracht.
Nochmal vielen Dank
Gruß Dirk
hee, cool, dass nenn ich mal ne Erklärung - vielen Dank, wieder ne Masse gelernt heut
Mit dieser Indexierung muss ich auch noch besser umgehen lernen........
Hatte mir übrigens den Fehler selbst eingebaut, hatte (vermutlich) anstatt den Code zu überschreiben, nur auf einfügen geklickt, und somit stand Dein Code und der alte Code im Makro
Vielen Dank für Deine Erläuterungen und Deine Hilfe, hat "mein" Projekt doch ganz schön weiter gebracht.
Nochmal vielen Dank
Gruß Dirk