ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3537|回复: 8

[分享] VBA读取PDF文件内容(字符级别读取)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-11-24 20:37 | 显示全部楼层 |阅读模式
本帖最后由 bluesky_0 于 2022-11-25 08:55 编辑

Private Sub CommandButton3_Click()
'读取PDF文件内容,不支持图片.仅支持源文件是文档文件转化为PDF的
sTime = Timer
'PDF_File As String
Dim AC_PD As New Acrobat.AcroPDDoc
Dim AC_Hi As Acrobat.AcroHiliteList
Dim AC_PG As Acrobat.AcroPDPage
Dim AC_PGTxt As Acrobat.AcroPDTextSelect

Dim WS_PDF As Worksheet
Dim RW_Ct As Long
Dim Col_Num As Integer
Dim Li_Row As Long
Dim Yes_Fir As Boolean

Dim Ct_Page As Long
Dim i As Long, j As Long, k As Long, ROW_DEL As Long
Dim T_Str As String

Dim Hld_Txt As Variant

'Application.ScreenUpdating = False
Set AC_PD = New Acrobat.AcroPDDoc 'PDF文件
Set AC_Hi = New Acrobat.AcroHiliteList 'PDF文本字符
AC_Hi.Add 0, 32767 '限制文本字符个数
With AC_PD
watermarkfile = ThisWorkbook.Path & "\" & Sheet1.Range("A" & 2) '需要操作的文件名
.Open watermarkfile '打开PDF文件
    Ct_Page = .GetNumPages '得到PDF文件页数
    If Ct_Page = -1 Then 'pdf文件页数不对
        MsgBox "请确认PDF文件 '" & PDF_File & "'"
        .Close
        Set WS_PDF = Nothing
        Set AC_PGTxt = Nothing
        Set AC_PG = Nothing
        Set AC_Hi = Nothing
        Set AC_PD = Nothing
    End If

ROW_DEL = Sheet2.Range("E62222").End(xlUp).Row
ROW_DEL = Application.WorksheetFunction.Max(ROW_DEL, 2)
Sheet2.Range("E2:G" & ROW_DEL).Clear '清除读取区域的旧数据
'MsgBox ROW_DEL
    For i = 1 To Ct_Page   '从PDF第一页 到最后一页
        T_Str = ""
        Set AC_PG = .AcquirePage(i - 1) '得到当前页
        Set AC_PGTxt = AC_PG.CreateWordHilite(AC_Hi) '得到当期文字列表

        If Not AC_PGTxt Is Nothing Then
            With AC_PGTxt
            III = .GetNumText
                For j = .GetNumText - 8 To .GetNumText - 1
                    T_Str = T_Str & .GetText(j) '获得文本
                Next j
            End With
        End If
             T_Str = Right(T_Str, 13)
                    Sheet2.Range("E" & i + 1).Value = T_Str
                    Sheet2.Range("F" & i + 1).Value = i
    Next i
    .Close
End With
'Sheet2.Range("G" & 2).Value = "=B2=E2"
'Sheet2.Range("G2:G" & i).FillDown

Application.ScreenUpdating = True

Set WS_PDF = Nothing
Set AC_PGTxt = Nothing
Set AC_PG = Nothing
Set AC_Hi = Nothing
Set AC_PD = Nothing

MsgBox "数据计算完毕!用时" & Round(Timer - sTime, 2) & "秒。" & Round((Timer - sTime) / 60, 4) & "分钟。"
End Sub

xlsm文件附件:



处理单个PDF文件.rar

123.59 KB, 下载次数: 359

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-11-25 08:28 | 显示全部楼层
image.jpg

一开始就出错。是什么问题?

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-25 08:44 | 显示全部楼层
wengjl 发表于 2022-11-25 08:28
一开始就出错。是什么问题?

需要安装PDF程序,然后查看 VBA引用
我把xlsm文件发来,放在第一页

2022-11-25_8-43-06.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-11-25 09:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-6-15 23:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-7 22:02 | 显示全部楼层
bluesky_0 发表于 2022-11-25 08:44
需要安装PDF程序,然后查看 VBA引用
我把xlsm文件发来,放在第一页

大神,我安装了 Adobe Acrobat pro,为什么没有 Adobe Acrobat 10.0 type Libray?求解答

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-8 08:40 | 显示全部楼层
岷山沅水 发表于 2023-10-7 22:02
大神,我安装了 Adobe Acrobat pro,为什么没有 Adobe Acrobat 10.0 type Libray?求解答

Adobe Acrobat XXX type Libray 和你安装的版本有关
xxx表示版本号

TA的精华主题

TA的得分主题

发表于 2024-1-14 12:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-23 11:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习了!楼主这样处理PDF也太强大了!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 15:38 , Processed in 0.044371 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表