ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: Ericcccccc

[求助] 如何批量获取目录下PDF文件内容

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-4-15 10:26 来自手机 | 显示全部楼层
想到一个折衷的办法,如果想要结果显示在一个excel表里,可以先将多个pdf文件合并成一个,然后再用大神的语句转换。

TA的精华主题

TA的得分主题

发表于 2019-4-15 11:08 来自手机 | 显示全部楼层
哦,漏看了要求每个pdf单独sheet

TA的精华主题

TA的得分主题

发表于 2019-4-15 11:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Public PDF_PATH As String
Sub cmd_imp_Click()

Dim OS_FSO As Object
Set OS_FSO = CreateObject("Scripting.filesystemobject")
Dim Dlg_File As FileDialog
Dim PDF_FILE As String


Set Dlg_File = Application.FileDialog(msoFileDialogFilePicker)


PDF_PATH = Dir(ThisWorkbook.Path & "\" & "*.pdf")

Do

'With Dlg_File
   '.Filters.Add "PDF文件", "*.pdf"
  ' If .Show = -1 Then
        'PDF_Path = .SelectedItems(1)
  'End If
'End With

'If OS_FSO.fileexists(PDF_Path) = False Then
   ' MsgBox "PDF文件没有找到"
  ' Set OS_FSO = Nothing
  ' Exit Sub
'End If

PDF_FILE = ThisWorkbook.Path & "\" & PDF_PATH
Call Imp_Into_XL(PDF_FILE)

PDF_PATH = Dir

Loop Until Len(PDF_PATH) = 0
MsgBox "完成"
End Sub

Sub Imp_Into_XL(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

Li_Row = Rows.Count

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

Dim Hld_Txt As Variant

RW_Ct = 0
Col_Num = 1

Application.ScreenUpdating = False

Set AC_PD = New Acrobat.AcroPDDoc
Set AC_Hi = New Acrobat.AcroHiliteList

AC_Hi.Add 0, 32767

With AC_PD


   .Open PDF_FILE

    Ct_Page = .GetNumPages
   
    If Ct_Page = -1 Then
        MsgBox "请确认PDF文件 '" & PDF_FILE & "'"
        .Close
        GoTo h_end
    End If

    For Each WS_PDF In Sheets
      Application.DisplayAlerts = False
        If WS_PDF.Name = PDF_PATH Then WS_PDF.Delete
      Application.DisplayAlerts = True
    Next

    Set WS_PDF = Worksheets.Add(, Worksheets(Sheets.Count))
    WS_PDF.Name = PDF_PATH

    For i = 1 To Ct_Page
        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
                For j = 0 To .GetNumText - 1
                    T_Str = T_Str & .GetText(j)
                Next j
            End With
        End If

        With WS_PDF

             If T_Str <> "" Then

                Hld_Txt = Split(T_Str, vbCrLf)

                 Yes_Fir = True

                 For k = 0 To UBound(Hld_Txt)

                      RW_Ct = RW_Ct + 1

                      If Yes_Fir Then
                         RW_Ct = RW_Ct + 1
                        .Cells(RW_Ct, Col_Num).Value = "第" & i & "页"
                         RW_Ct = RW_Ct + 2
                         Yes_Fir = False
                      End If

                       If RW_Ct > Li_Row Then
                          RW_Ct = 1
                           Col_Num = Col_Num + 1
                        End If

                        T_Str = CStr(Hld_Txt(k))
                        If Left(T_Str, 1) = "=" Then T_Str = "'" & T_Str
                        .Cells(RW_Ct, Col_Num).Value = T_Str

                   Next k

                 Else

                    RW_Ct = RW_Ct + 1
                    .Cells(RW_Ct, Col_Num).Value = "页面无文字 " & i
                     RW_Ct = RW_Ct + 1

                 End If

         End With
    Next i

    .Close

End With

Application.ScreenUpdating = True



h_end:

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



End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-4-15 11:40 | 显示全部楼层
可以试试这个,貌似成功了。而且可以PDF文件名给EXCEL的SHEET表命名。但是PDF文件与EXCEl文件要在同一个文件夹下。

TA的精华主题

TA的得分主题

发表于 2019-4-15 11:46 | 显示全部楼层
Ericcccccc 发表于 2019-3-11 09:46
If Ct_Page = -1 Then
        MsgBox "请确认PDF文件 '" & PDF_File & "'"
代码运行到在这里卡住 ...

应该是大神原来的PDF_PATH是个路径,而更改成循环模式后,PDF_path变成了文件名。因此第二段代码找不到这个文件,所以才会识别页码为-1.

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-16 09:14 | 显示全部楼层
某某某841 发表于 2019-4-15 11:46
应该是大神原来的PDF_PATH是个路径,而更改成循环模式后,PDF_path变成了文件名。因此第二段代码找不到这 ...

追了这么久的问题解决了,非常感谢

TA的精华主题

TA的得分主题

发表于 2019-11-1 09:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
要借助activex控件的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 21:29 , Processed in 0.031581 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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