【问题标题】:Convert PDF to Word Doc using excel VBA code使用 excel VBA 代码将 PDF 转换为 Word Doc
【发布时间】:2019-02-17 12:34:37
【问题描述】:

每个人。 我需要一个 VBA 代码来将 excel 数据转换为 PDf 到 word doc,我编写了一个将 excel 打印为 pdf 的宏,但现在我想将它打印为该 pdf 中的 word,所以简短的版本,Excel 到 PDF 到 Word .这一切都让我想保持 excel 数据的格式

【问题讨论】:

  • 当您保存为 pdf 时,也将其另存为 word 文档。看到这个SO question

标签: excel vba pdf ms-word


【解决方案1】:

我使用相同的基本代码,但我总是收到一条错误消息,提示“保存到源文件时出错。它可以被使用。” 我有“Adobe Acrobat PRO DC”。 我使用参考“Adobe Acrobat 10.0 类型库”

Option Explicit

Sub convert_pdf_doc()

Dim aApp As Acrobat.AcroApp
Dim av_doc As Acrobat.AcroAVDoc
Dim pdf_doc As Acrobat.AcroPDDoc
Dim jso_obj As Object

Dim sfile As String 'source file
Dim dfile As String 'destination file
Dim ext As String 'my choise of file

ext = "doc"

sfile = "C:\Temp\Test.pdf"
dfile = Replace(sfile, ".pdf", "." & ext, 1)

Set aApp = CreateObject("AcroExch.App")
Set av_doc = CreateObject("AcroExch.AVDoc")

If av_doc.Open(sfile, vbNull) = True Then

    Set pdf_doc = av_doc.GetPDDoc
    Set jso_obj = pdf_doc.GetJSObject
    
    jso_obj.SaveAs dfile, "com.adobe.acrobat." & ext

End If

av_doc.Close False

aApp.Exit
Set aApp = Nothing
Set av_doc = Nothing

End Sub

【讨论】:

    【解决方案2】:

    这将满足您的需求,但您需要安装 Adob​​e Acrobat。如果没有安装 Acrobat,我不知道有什么方法可以做到这一点。

    Option Explicit
    Option Private Module
    
    Sub ClearPaths()
    
        '------------------------------------------
        'Clears the contains of the sheet Paths.
    
        'By Christos Samaras
        'Date: 30/03/2013
        'http://www.myengineeringworld.net
        '------------------------------------------
    
        Dim LastRow As Long
    
        Application.ScreenUpdating = False
    
        shPaths.Activate
    
        'Find the last row.
        With shPaths
            LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        End With
    
        'Clear the contents of the cells.
        If LastRow > 1 Then
            Range(Cells(2, 1), Cells(LastRow, 2)).Value = ""
            Columns("A:B").EntireColumn.AutoFit
        End If
    
        shPaths.Range("A2").Select
        Application.ScreenUpdating = True
    
    End Sub
    
    
    Option Explicit
    Option Private Module
    
    Sub ExportAllPDFs()
    
        '----------------------------------------------------------------
        'Converts all the PDF files that their paths are in column A of
        'the worksheet "Convert PDF Files" into a different file format,
        'based on the value in column B (extension).
    
        'By Christos Samaras
        'Date: 18/07/2013
        'http://www.myengineeringworld.net
        '----------------------------------------------------------------
    
        Dim LastRow As Long
        Dim i As Integer
    
        shPaths.Activate
    
        'Find the last row.
        With shPaths
            LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        End With
    
        'Check that there are available file paths.
        If LastRow < 2 Then
            shPaths.Range("A2").Select
            MsgBox "There are no file paths to convert!", vbInformation, "File paths missing"
            Exit Sub
        End If
    
        'Checking for errors before conversion.
        For i = 2 To LastRow
    
            'Check if the file extensions are not empty.
            If Cells(i, 2).Value = "" Then
                shPaths.Cells(i, 2).Select
                MsgBox "Please select an output format from the dropdown list!", vbCritical, "File paths missing"
                Exit Sub
            End If
    
            'Check if the file exists.
            If Dir(shPaths.Cells(i, 1).Value) = "" Then
                shPaths.Cells(i, 1).Select
                MsgBox "The file path is not valid!", vbCritical, "File path error"
                Exit Sub
            End If
    
            'Check if the input file is a PDF file.
            If LCase(Right(shPaths.Cells(i, 1).Value, 3)) <> "pdf" Then
                shPaths.Cells(i, 1).Select
                MsgBox "The file is not a pdf file!", vbCritical, "No pdf file"
                Exit Sub
            End If
    
        Next i
    
        'For each cell in the range "A2:A" & last row convert the pdf file
        'into different format according to the "B2:B" & last row value.
        For i = 2 To LastRow
            SavePDFAs Cells(i, 1).Value, Cells(i, 2).Value
        Next i
    
        'Adjust the two columns.
        Columns("A:B").EntireColumn.AutoFit
    
        'Inform the user that conversion finished.
        MsgBox "All files were converted successfully!", vbInformation, "Finished"
    
    End Sub
    
    Private Sub SavePDFAs(PDFPath As String, FileExtension As String)
    
        '---------------------------------------------------------------------------------------
        'Saves a PDF file as other format using Adobe Professional.
    
        'In order to use the macro you must enable the Acrobat library from VBA editor:
        'Go to Tools -> References -> Adobe Acrobat xx.0 Type Library, where xx depends
        'on your Acrobat Professional version (i.e. 9.0 or 10.0) you have installed to your PC.
    
        'Alternatively you can find it Tools -> References -> Browse and check for the path
        'C:\Program Files\Adobe\Acrobat xx.0\Acrobat\acrobat.tlb
        'where xx is your Acrobat version (i.e. 9.0 or 10.0 etc.).
    
        'By Christos Samaras
        'Date: 30/03/2013
        'http://www.myengineeringworld.net
        '---------------------------------------------------------------------------------------
    
        Dim objAcroApp      As Acrobat.AcroApp
        Dim objAcroAVDoc    As Acrobat.AcroAVDoc
        Dim objAcroPDDoc    As Acrobat.AcroPDDoc
        Dim objJSO          As Object
        Dim boResult        As Boolean
        Dim ExportFormat    As String
        Dim NewFilePath     As String
    
        'Initialize Acrobat by creating App object.
        Set objAcroApp = CreateObject("AcroExch.App")
    
        'Set AVDoc object.
        Set objAcroAVDoc = CreateObject("AcroExch.AVDoc")
    
        'Open the PDF file.
        boResult = objAcroAVDoc.Open(PDFPath, "")
    
        'Set the PDDoc object.
        Set objAcroPDDoc = objAcroAVDoc.GetPDDoc
    
        'Set the JS Object - Java Script Object.
        Set objJSO = objAcroPDDoc.GetJSObject
    
        'Check the type of conversion.
        Select Case LCase(FileExtension)
            Case "eps": ExportFormat = "com.adobe.acrobat.eps"
            Case "html", "htm": ExportFormat = "com.adobe.acrobat.html"
            Case "jpeg", "jpg", "jpe": ExportFormat = "com.adobe.acrobat.jpeg"
            Case "jpf", "jpx", "jp2", "j2k", "j2c", "jpc": ExportFormat = "com.adobe.acrobat.jp2k"
            Case "docx": ExportFormat = "com.adobe.acrobat.docx"
            Case "doc": ExportFormat = "com.adobe.acrobat.doc"
            Case "png": ExportFormat = "com.adobe.acrobat.png"
            Case "ps": ExportFormat = "com.adobe.acrobat.ps"
            Case "rft": ExportFormat = "com.adobe.acrobat.rft"
            Case "xlsx": ExportFormat = "com.adobe.acrobat.xlsx"
            Case "xls": ExportFormat = "com.adobe.acrobat.spreadsheet"
            Case "txt": ExportFormat = "com.adobe.acrobat.accesstext"
            Case "tiff", "tif": ExportFormat = "com.adobe.acrobat.tiff"
            Case "xml": ExportFormat = "com.adobe.acrobat.xml-1-00"
            Case Else: ExportFormat = "Wrong Input"
        End Select
    
        'Check if the format is correct and there are no errors.
        If ExportFormat <> "Wrong Input" And Err.Number = 0 Then
    
            'Format is correct and no errors.
    
            'Set the path of the new file. Note that Adobe instead of xls uses xml files.
            'That's why here the xls extension changes to xml.
            If LCase(FileExtension) <> "xls" Then
                NewFilePath = WorksheetFunction.Substitute(PDFPath, ".pdf", "." & LCase(FileExtension))
            Else
                NewFilePath = WorksheetFunction.Substitute(PDFPath, ".pdf", ".xml")
            End If
    
            'Save PDF file to the new format.
            boResult = objJSO.SaveAs(NewFilePath, ExportFormat)
    
            'Close the PDF file without saving the changes.
            boResult = objAcroAVDoc.Close(True)
    
            'Close the Acrobat application.
            boResult = objAcroApp.Exit
    
        Else
    
            'Something went wrong, so close the PDF file and the application.
    
            'Close the PDF file without saving the changes.
            boResult = objAcroAVDoc.Close(True)
    
            'Close the Acrobat application.
            boResult = objAcroApp.Exit
    
        End If
    
        'Release the objects.
        Set objAcroPDDoc = Nothing
        Set objAcroAVDoc = Nothing
        Set objAcroApp = Nothing
    
    End Sub
    

    【讨论】:

    • 这很好用。但有一件事,如果 PDF 有任何类型的受保护视图 - 它will not convert 直到该保护被删除(例如“启用所有功能”)
    • 以下错误处理将提示用户需要执行哪些操作。就在 Dim 的下方 On Error Goto errhndl 在“End Sub”上方放置 done: Exit Sub errhndl: If Err.Description Like "*Security settings prevent*" Then MsgBox "The PDF requires content to be enabled first. Please open the PDF, Enable All Features, close and try again" Else MsgBox "The following error occurred: " &amp; Err.Description End If 我对错误的格式表示歉意 - 我永远无法让它在 cmets 中正常工作
    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多