calc - pdf, mehrerer Tabellenblätter in eine PDF

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: calc - pdf, mehrerer Tabellenblätter in eine PDF

Re: calc - pdf, mehrerer Tabellenblätter in eine PDF

von DITA » Fr, 21.08.2015 00:53

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

Re: calc - pdf, mehrerer Tabellenblätter in eine PDF

von Stephan » Do, 20.08.2015 18:21

Es steht doch alles im Makro:

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.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
Druckbereiche beispielsweise mit (von) "A1" bis "K34" ändere
A --> Index 0
1--> Index 0
K-->Index 10
34-->Index 33

also:

Code: Alles auswählen

Set_PrintAreas (n, 0, 0, 10, 33)
wobei für n der gewünschte Blattindex eingesetzt werden muss, das Blatt das ganz links sichtbar ist hat 0


Gruß
Stephan

Re: calc - pdf, mehrerer Tabellenblätter in eine PDF

von DITA » Do, 20.08.2015 01:28

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

Re: calc - pdf, mehrerer Tabellenblätter in eine PDF

von Stephan » Mi, 19.08.2015 09:18

Kannst Du bitte nochmal schauen was ich falsch mache - danke
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.

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
(ich hoffe keine Schreibfehler im Code zu haben)


Gruß
Stephan

Re: calc - pdf, mehrerer Tabellenblätter in eine PDF

von DITA » Mo, 17.08.2015 22:54

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

Re: calc - pdf, mehrerer Tabellenblätter in eine PDF

von Stephan » Mo, 17.08.2015 07:34

Willst Du unsere Aufmerksamkeit testen?

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

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

calc - pdf, mehrerer Tabellenblätter in eine PDF

von DITA » Mo, 17.08.2015 02:08

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
PDF-Test-Inet.ods
(16.47 KiB) 236-mal heruntergeladen
Vielen Dank schon mal im vorraus

Gruß Dirk

Nach oben