VBA将PDF文档内容逐行写入Excel

VBA是无法直接读取PDF文档的,但结合上期我给大家介绍了PDF转换工具xpdf-tools-4.05,先利用它将PDF文档转换为TXT文档,然后再将TXT的内容写入Excel,这样就间接实现了将PDF文档的内容导入Excel的操作。下面的代码将向大家演示如何实现这一操作:

复制代码
Sub Import_PDF_File()
'
' 导入PDF文档
'
    Dim pdftotext As String
    pdftotext = "C:\Program Files (x86)\xpdf-tools\bin32\pdftotext.exe"
    
    Dim fd As fileDialog
    Dim filePath As String
    
    ' 文件选择对话框
    Set fd = Application.fileDialog(msoFileDialogFilePicker)
    With fd
        .Title = "选择PDF文件"
        .InitialFileName = UserDirectory  ' 设置默认路径
        .Filters.Clear
        .Filters.Add "PDF文件", "*.pdf"
        .AllowMultiSelect = False
        If .Show <> -1 Then Exit Sub
        filePath = .SelectedItems(1)
    End With
    
    Cells.ClearContents    ' 清除所有数据
    
    Application.ScreenUpdating = False    ' 禁用屏幕更新
    
    Dim InputFile As String, OutputFile As String
    InputFile = filePath
    OutputFile = Left(filePath, Len(filePath) - 4) & ".txt"

    ' 转换PDF为TXT文档
    Dim shellCommand As String
    shellCommand = pdftotext & " -layout -enc UTF-8 """ & InputFile & """ """ & OutputFile & """"
    Shell shellCommand, vbHide

    ' 等待转换完成
    Application.Wait Now + TimeValue("00:00:02")
    
    Dim txtPath As String
    txtPath = OutputFile

    If UTF8TOANSI(txtPath) = False Then MsgBox "转换ANSI编码失败" & txtPath, vbCritical, "错误"

    Dim TxtPathANSI As String
    TxtPathANSI = Left(txtPath, Len(txtPath) - 4) & "_ANSI.txt"

    ' 读取文本文件
    Dim i As Long
    Dim Line As String
    Dim LineNum As Long
    Dim symbols As String
    Open TxtPathANSI For Input As #1
        i = 0
        Do While Not EOF(1)
            Line Input #1, Line
            i = i + 1
            Cells(i, 1).Value = Line
            LineNum = i
        Loop
    Close #1

    ' 删除临时文件
    Kill txtPath
    Kill TxtPathANSI

    Columns("A:A").Select
    With Selection
        .HorizontalAlignment = xlLeft   ' 左对齐
    End With
    Range("A1").Select
    
    Application.ScreenUpdating = True    ' 启用屏幕更新
    
    MsgBox "成功导入 " & LineNum & " 行数据。", vbInformation, "提示"

End Sub

该操作只适合文字版的PDF,不适合图片版的PDF,也就是说如果你的PDF是使用扫描仪生成的那该方法不适合。另外,导入txt文档需要使用UTF8TOANSI函数将UTF8编码转换为ANSI编码,否则可能导入的是乱码,关于该函数的使用方法详见《 VBA转换TXT文档编码(UTF-8转换为ANSI)》

相关推荐
DeskUI~~32 分钟前
倚天剑术36--为您的PDF添加相框
pdf
优化控制仿真模型2 小时前
2026年初中中考英语大纲词汇表1600个电子版PDF(含单词音频和默写本)
经验分享·pdf
其实秋天的枫2 小时前
【大英赛】全国大学生英语竞赛C类历年真题、样卷、听力音频及答案解析电子版PDF(2012-2026年)
经验分享·pdf
看山还是山,看水还是。3 小时前
消控室五方对讲接听操作流程
经验分享·笔记·搜索引擎·pdf·百度云·印象笔记·有道云笔记
Dontla4 小时前
PDF嵌入介绍(嵌入字体、嵌入图片、嵌入附件)Adobe Acrobat Reader查看是否嵌入
pdf·adobe acrobat reader
开开心心就好4 小时前
禁止指定软件运行的小工具仅1M
人工智能·pdf·音视频·语音识别·big data·媒体·consul
其实秋天的枫5 小时前
护士执业资格考试历年真题及答案解析电子版PDF(2011-2025年)
经验分享·pdf
不知名的老吴5 小时前
高效PDF利器:PDF-XChange 10.1即用版分享
pdf
AmyLin_20015 小时前
【pdf2md-1:开篇】高保真PDF转MarkDown附源码(标题/表格/图片全还原)
python·pdf·github·sdk·pdf2md·文档工具
优化控制仿真模型5 小时前
【大英赛】2012-2026年全国大学生英语竞赛ABCD类历年真题、样卷、听力音频及答案解析电子版PDF
经验分享·pdf