Ergebnis 1 bis 10 von 10

Thema: [StarBasic] OOo-Calc - einzelnes Blatt als PDF exportieren

  1. #1
    schläft auf dem Boardsofa Avatar von Ernst_42
    Registriert seit
    01.03.03
    Ort
    Rheinbreitbach
    Beiträge
    1.105

    [StarBasic] OOo-Calc - einzelnes Blatt als PDF exportieren

    Hallöchen liebe Programmierer-Experten...
    nach Stunden vergeblicher Suche stelle ich mal hier meine Frage.

    Hier läuft:
    OpenOffice 3.x als NeoOffice/J 3.x
    auf Mac OS X 10.6.x

    Aufgabenstellung:
    1. Ich möchte in einem Calc-Dokument einzelne(!) Blätter als PDF exportieren.
    2. Der Ordnername wird einer Zelle entnommen, die das Datum der letzten (automatisierten) Überarbeitung enthält.
    3. Die Namen der Tabellenblätter werden als Dateinamen übernommen.


    Bisher gelöst:
    2. und 3. (trivial)
    ungelöst:
    1.

    Problem:
    Die Methode StoreToURL scheint nur für das Dokument selbst, nicht aber für einzelne Blätter zu funktionieren. => Es wird das gesamte Dokument als PDF exportiert
    Die Methode Print scheint nicht für den PDF-Export geeignet zu sein (wäre über den Dialog aber die Möglichkeit, nur ein einzelnes Blatt zu "drucken").
    (Im Code rot markiert.)

    Kann mir jemand einen Fingerzeig geben? TIA

    Meine Lösung bisher:
    Code:
    Sub myPDFExport
    	const ci_Sh_num as integer = 5
    	dim document   as object
    	dim dispatcher as object
    	dim i as integer
    	dim args0(0) as new com.sun.star.beans.PropertyValue
    
    	rem		NICHT ABGEFANGEN WIRD DERZEIT, 
    	rem		FALLS DER ENTSPRECHENDER ORDNER NOCH NICHT EXISTIERT !!!
    
    	rem get access to the document
    	document   = ThisComponent.CurrentController.Frame
    	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    
    	rem - Hole aktuellen Stand (Datum)
    	args0(0).Name = "ToPoint"
    	args0(0).Value = "Version_Date"
    	dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args0())
    
    	dim dayFormatted as string 
    	dayFormatted = right(ThisComponent.getCurrentSelection().getstring(),10)
    	dayFormatted = left(version_date,4) + mid(version_date,6,2) + right(version_date,2)  
    
    	rem - Export PDF - Attributes
    	dim pdfProperties(0) as new com.sun.star.beans.PropertyValue 
    	pdfProperties(0).Name = "FilterName" 
    	pdfProperties(0).Value = "calc_pdf_Export" 
    	rem - path and extension
    	dim path as string 
    	path = "/Users/Shared/Vids/- Contents (2print)/" + dayFormatted
    	dim extension as string 
    	extension = ".pdf" 
    	rem - string containing protocol, path and filename
    	dim pdfurl as string 
    
    	rem - sheet's number
    	args0(0).Name = "Nr"
    	rem : "args0(0).Value"  will be set separately
    
    	for i=1 to ci_Sh_num 
    		args0(0).Value = i
    		dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args0())
    		pdfurl = converttourl("file:///" + path + "/" + ThisComponent.getCurrentController.getActiveSheet.getName() + extension)
    		rem - Export PDF
    
    		rem Variante 1 - Fehler, da Methode nicht verfügbar
    			ThisComponent.getCurrentController.getActiveSheet.storeToURL(pdfurl, pdfProperties())
    		rem Variante 2 - exportiert aber leider alles!
    			ThisComponent.storeToURL(pdfurl, pdfProperties()) 
    
    	next i
    End Sub ' Sub myPDFExport

  2. #2
    chronische Wohlfühlitis Avatar von duffguy
    Registriert seit
    07.09.07
    Beiträge
    968

    AW: [StarBasic] OOo-Calc - einzelnes Blatt als PDF exportieren

    Hallo Ernst42

    ich habe keine Ahnung von Starbasic aber trotzdem einen Lösungsvorschlag:

    Wenn du die besagte Seite programm-gesteuert in ein temporäres Dokument kopierst,
    und dieses dann als PDF speicherst. Vielleicht geht's so...

  3. #3
    assimiliert
    Registriert seit
    16.12.01
    Beiträge
    8.150

    AW: [StarBasic] OOo-Calc - einzelnes Blatt als PDF exportieren

    PDF-Druckertreiber installieren, dann aktuelle Ansicht mit diesem ausdrucken

  4. #4
    schläft auf dem Boardsofa Avatar von Ernst_42
    Registriert seit
    01.03.03
    Ort
    Rheinbreitbach
    Beiträge
    1.105

    AW: [StarBasic] OOo-Calc - einzelnes Blatt als PDF exportieren

    Erst mal danke für die Antworten.

    @duffguy:
    Export in eine Datei ist ja durchaus das, was ich will... aber eben nur ein Tabellenblatt. Das das beim Export dann als PDF geschrieben wird, ist nur eine anzugebende Option...

    @Tequilla: PDF-Druckertreiber beim Mac nachinstallieren??? So ein Ding ist schon integriert.
    Oder meinst du noch einen nachinstallieren, um den dann als Drucker anzusprechen? Dann müsste das Ding aber Parameter (zu verwendender Dateiname) akzeptieren...


    Na, kennt sich vielleicht doch noch jemand mit Starbasic aus???

    Grüße

  5. #5
    assimiliert
    Registriert seit
    16.12.01
    Beiträge
    8.150

    AW: [StarBasic] OOo-Calc - einzelnes Blatt als PDF exportieren

    Ich hab noch an nem Mac gespielt
    Wenn doch ein PDF Drucker installiert ist reicht es dann nicht damit die aktuelle Ansicht zu drucken?

  6. #6
    chronische Wohlfühlitis Avatar von duffguy
    Registriert seit
    07.09.07
    Beiträge
    968

    AW: [StarBasic] OOo-Calc - einzelnes Blatt als PDF exportieren

    Ich hab hier OOo Calc unter Windows. Wenn ich unter Datei die Option
    Export als PDF anwähle, kriege ich den Dialog wie im Anhang.

    Ich würde also mal den Makro Rekorder laufen lassen, diese Funktion ausführen,
    und danach im generierten Code forschen, wie man das anstellen soll.

    hth
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht

Name:	calcpdf.png
Hits:	314
Größe:	28,1 KB
ID:	50747  

  7. #7
    schläft auf dem Boardsofa Avatar von Ernst_42
    Registriert seit
    01.03.03
    Ort
    Rheinbreitbach
    Beiträge
    1.105

    AW: [StarBasic] OOo-Calc - einzelnes Blatt als PDF exportieren

    @Tequilla:
    Die Möglichkeit des PDF-Drucks ist bei Mac OS X integriert. Ja.
    Aber bei meiner Suche habe ich keine Möglichkeit in Starbasic (!) gefunden, um über einen 'PDF-Drucker' zu drucken. Der Druckdialog (scheint der Standarddialog des Systems zu sein) zweigt mit einem Export ab (Knopf "PDF") und weist nicht separat einen PDF-Drucker aus.

    @duffguy
    Der Druckdialog mit PDF ließ sich bei mir irgendwie nicht aufnehmen, und den PDF-Export hatte ich vor einiger Zeit schon für mich verworfen (warum auch immer) und jetzt nicht mehr daran gedacht, es nochmals auszuprobieren... ist jetzt nachgeholt. (Danke für den Tipp.)

    Da ich ja ein einzelnes Tabellenblatt ausgeben will dachte ich mir nun, im Blatt alles zu markieren und im Bereich "Range" die Option "Selection" zu verwenden.
    => Im Dialog macht NeoOffice es sauber.
    => Lasse ich die aufgenommene Sub laufen (keine Veränderung gemacht), funzt es nicht...
    Er exportiert immer nur das erste Blatt

  8. #8
    Herzlich willkommen!
    Registriert seit
    14.11.11
    Beiträge
    4

    Lösung:

    Hallo
    ich hatte das Problem auch einmahl.
    eine Saubere, Betriebssystem unabhängige Lösung ist:
    Die Tabelle als "Druckbereich" festlegen und dann als pdf exportieren:
    Hier der Code:
    Im ersten "Sub Mein" muss der "TabellenMame" angepast werden. ansonsten ist es komplett einsatzbereit. einfach
    das Sub Main aus einer calc datei ausführen und fertig.
    Code:
    REM  *****  BASIC  *****
    'Copyright (c) 2011 Frieder Delor, Mailto: Einfach hier im Forum anschreiben :-)
    'The funktion: GetPath()is originally from :Copyright (c) 2011 Volker Lenhardt
    'This program is free software; you can redistribute it and/or modify it under 
    'the terms of the GNU General Public License as published by the Free Software
    'Foundation; either version 2 of the License, or (at your option) any later 
    'version.
    
    'This program is distributed in the hope that it will be useful, but WITHOUT 
    'ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    'FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
    
    'You should have received a copy of the GNU General Public License along with 
    'this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
    'Place, Suite 330, Boston, MA 02111-1307 USA
    '=======================================================
    Sub Main
    ExportToPDF ("Deine Tabellen Name")
    end sub
    Sub ExportToPDF (sTableNam As String)
      sPath = GetPath
      If sPath = "" Then
        MsgBox "Kein gültiges Verzeichnis.", 16, "Fehler"
        goTo Zeile1
      End If 
      Zeile0:
      sStandard = "PDF_Export_" & Format(Now, "hh-mm")& "Uhr_" & _
                        Format(Now,"dd.mm.yyyy") 
      sName=InputBox ("Bitte geben Sie einen Mamen" & Chr(10) & _
                      "für die DPF-Datei ein" , "PDF Name", sStandard )
      If sName="" Then
        nVar=MsgBox ("Sie haben keinen Name eingegeben. " & Chr(10) & _
                     "Bitte geben Sie einen Namen ein. " & Chr(10) & _
                     "Wenn Sie auf ""Abbrechen"" klicken, " & Chr(10) & _
                     "wird der export abgebrochen.", 1, "Fehler")
        If nVar=1 then 'OK wurde gedrückt
          goTo Zeile0
        Else
          goTo Zeile1
        End if  
      End if
      sFileName= sName & ".pdf"
      If FileExists(sPath & sFileName) then
      	nVar=MsgBox ("Die Datei existiert bereits. " & Chr(10) & _
                     "Soll die Datei überschrieben werden?. " & Chr(10) & _
                     Chr(10) & _
                     "Wenn Sie auf ""Abbrechen"" klicken, " & Chr(10) & _
                     "wird der export abgebrochen." & Chr(10) & _
                     "Wenn Sie auf ""Nein"" klicken," & Chr(10) & _
                     "können Sie einen anderen Namen wählen.", 3, "Fehler")
        Select Case nVar
        Case 2 'Abbrechen wurde gedrückt
          goTo Zeile1
        Case 6 'Ja wurde gedrückt
        Case 7 'Nein wurde gedrückt
          goTo Zeile0
        End Select 
      end if
      ThisComponent.addActionLock
      ThisComponent.LockControllers
      oDoc = ThisComponent
      oSheets = oDoc.Sheets
      oSheet1 =oDoc.Sheets.getByName(sTableNam) 
      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
    Next
      export_pdf(sPath & sFileName)  
      Delete_PrintAreas
      MsgBox "Das PDF wurden erfolgreich erstellt." , 0, "PDF Export"
    
      Zeile1:
      ThisComponent.UnlockControllers 
      ThisComponent.removeActionLock
    End sub
    '-------------------------------------------
    sub Delete_PrintAreas 'Alle Druckbereich Löschen
      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) '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
    '------------------------------------
    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
    '----------------------------------
    Function GetPath() As String
      Dim  oPathSettings, oFolderDialog
      Dim sPath As String
    
        oPathSettings = CreateUnoService("com.sun.star.util.PathSettings")
        sPath = oPathSettings.Work
        oFolderDialog = _
              CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
        oFolderDialog.SetDisplayDirectory(sPath)
        If oFolderDialog.Execute() = _
              com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
          sPath = oFolderDialog.GetDirectory
        Else
          GetPath = ""
          Exit Function
        End If
      If Right(sPath, 1) <> "/" Then sPath = sPath & "/"
      GetPath = sPath
    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" 'Das bewirkt, 
    'dass nur der ausgewählte Druckbereich Exporrtiert wird.
      args2(2).Value = true
    
      ThisComponent.storeToURL(sFileName,args2())
    end sub
    Gruß
    Frieder Delor
    Geändert von Wurzelmanager (18.11.11 um 11:03 Uhr)

  9. #9
    Und jetzt? Avatar von Supernature
    Registriert seit
    24.02.01
    Ort
    Großherzogtum Baden
    Beiträge
    51.599

    AW: [StarBasic] OOo-Calc - einzelnes Blatt als PDF exportieren

    ot:
    Hallo, herzlich willkommen und danke für Deinen Beitrag
    Vielleicht solltest Du im obigen Text Deine E-Mail-Adresse unkenntlich machen?
    Spambots grasen gerne Foren ab und sammeln die Adressen ein.

  10. #10
    schläft auf dem Boardsofa Avatar von Ernst_42
    Registriert seit
    01.03.03
    Ort
    Rheinbreitbach
    Beiträge
    1.105

    AW: [StarBasic] OOo-Calc - einzelnes Blatt als PDF exportieren

    (So, nach einiger Abwesenheit zurückgekehrt...)

    Danke erst mal an Wurzelmanager,
    der sich nicht nur die Mühe gemacht hat, in einem schon leicht angestaubten Thread einen Lösungsvorschlag beizutragen,
    sondern der auch daran gedacht hat, leicht angestaubte Threadersteller per PN auf seine Antwort hinzuweisen...

    Besonders vorteilhaft:
    Ich hatte bisher auch noch keine echte Lösung zu dem beschriebenen Problem gefunden.

    Also werde ich mich in den nächsten Tagen hinsetzen und deinen Vorschlag genauestens unter die elektronische Lupe nehmen, versprochen.
    Und dann gibt's auch ein (technisches) Feedback.

    Danke und Grüße

Ähnliche Themen

  1. [Tools] Einzelnes Verzeichnis verschlüsseln/verstecken
    Von Pennywise im Forum Allgemeine Computerfragen
    Antworten: 5
    Letzter Beitrag: 08.01.09, 16:02
  2. [WinXP] OpenOffice 2.0 Calc Problem
    Von CrawlWarner im Forum Alles rund um Windows
    Antworten: 1
    Letzter Beitrag: 29.06.06, 09:37
  3. Formel berechnen in OpenOffice Calc
    Von ElSer im Forum Alles rund um Windows
    Antworten: 0
    Letzter Beitrag: 20.01.06, 10:39

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •