Excel-Datei mit mehreren Excel-Sheets in eine PDF-Datei umwandeln

  • Hallo zusammen.

    Wie ich bereits in der Überschrift geschrieben habe, suche ich einen Weg, wie ich aus einer Excel-Datei die mehrere Excel-Sheets beinhaltet in eine PDF-Datei umwandeln kann. Das Problem ist, dass ich es einfach nicht schaffe, dass alle Excel-Sheets umgewandelt werden, sondern immer nur das aktive Sheet. Es sind auch in jeder Excel-Datei unterschiedlich viele Excel-Sheets.

    Vielleicht kann mir jemand helfen.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <WindowsConstants.au3>
    #include <Excel.au3>
    #include <excelex.au3>
    #include <file.au3>
    #include <array.au3>
    #Region ### START Koda GUI section ###
    $exceldoku2pdf = GUICreate("exceldoku2pdf", 615, 438, 191, 124)
    $Convert = GUICtrlCreateButton("Konvertieren", 112, 264, 113, 49)
    $Exit = GUICtrlCreateButton("Beenden", 384, 264, 115, 49)
    ;~ $Progress1 = GUICtrlCreateProgress(160, 344, 313, 33)
    $Oeffnen = GUICtrlCreateButton("Öffnen", 264, 144, 73, 49)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $Exit
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $oeffnen
    oeffnen()

    [/autoit] [autoit][/autoit] [autoit]

    Case $Convert
    convert()

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func oeffnen()
    Global $code = FileOpenDialog("Wähle XLSX oder XLS Datei aus!",@StartupDir, "(*.xlsx;*.xls)",1 + 4)

    [/autoit] [autoit][/autoit] [autoit]

    If @error Then MsgBox(0,"Fehler!", "Bitte wählen Sie zuerst eine XLSX-Datei aus!")
    Global $aFiles = StringSplit($code, "|", 1)
    For $i = 2 To UBound($aFiles) -1
    $aFiles[$i] = $aFiles[1] & '\' & $aFiles[$i]
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func convert()

    [/autoit] [autoit][/autoit] [autoit]

    If $aFiles[0] <= 1 Then
    For $i = 1 To $aFiles[0]
    Local $oExcel = _ExcelBookOpen($aFiles[$i])

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 2 To $aFiles[0]

    [/autoit] [autoit][/autoit] [autoit]

    Local $oExcel = _ExcelBookOpen($aFiles[$i])

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]

    Einmal editiert, zuletzt von Sirius (21. Februar 2014 um 10:34)

  • ich hab das mal mit nem vbs script aus dem netz und pdf creator umgesetzt!

    Befehl : cmd öffnen -> d:\PrintWkbk.vbs d:\testexcel.xls

    PrintWkbk.vbs

    [autoit]


    Const xlDoNotSaveChanges = 2

    [/autoit][autoit][/autoit][autoit]

    Dim fso, oXL, oWkbk

    [/autoit][autoit][/autoit][autoit]

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set oXL = CreateObject("Excel.Application")

    [/autoit][autoit][/autoit][autoit]

    oXL.Visible = False

    [/autoit][autoit][/autoit][autoit]

    If WScript.Arguments.Count = 0 Then
    WScript.Quit
    Else
    For A = 0 To (WScript.Arguments.Count - 1)
    If (Right(WScript.Arguments.Item(A), 3) = "xls") _
    AND fso.FileExists(WScript.Arguments.Item(A)) Then
    Set oWkbk = oXL.Workbooks.Open(WScript.Arguments.Item(A))
    oWkbk.PrintOut
    oWkbk.Close xlDoNotSaveChanges
    End If
    Next
    End If

    [/autoit][autoit][/autoit][autoit]

    oXL.Quit
    Set fso = Nothing
    Set oXL = Nothing

    [/autoit]

    eventuell hilft es weiter oder es kann einer in autoit umsetzen, wenn es nicht schon gemacht wurde :)

    gruß gmmg

  • Please see the _Excel_Export.au3 example in my rewrite of the Excel UDF.

  • Fragst Du doppelt? [ offen ] Excel nach PDF konvertieren?

    Wenn Du Deinen pdf-Standarddrucker bestimmst, dann würde Dir sicherlich zum Drucken bereits die Anweisung:

    [autoit]

    $oExcel.ActiveWorkbook.PrintOut

    [/autoit]

    weiterhelfen. Diese Anweisung druckt Deine gesamte Exceldatei aus. Die Parameter dazu findest Du bei Google / MSDN.

  • _Excel_Export hat den Vorteil, dass ein Range übergeben werden kann. Damit kann dann z.B Sheet 1, 3 und 5 ausgedruckt werden.