ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] VBA代码转换PDF为其他文件格式,如docx/jpg/xlsx/txt等

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2022-3-30 15:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
用得上,先收藏了

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-30 17:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
limonet 发表于 2022-3-30 15:29
是的,能不能帮试试?PDF Shaper小巧方便、获取总页数准确,Acrobat嫌他太大了,再次感谢。

没有找到VBA控制PDF Shaper的资料,一定要用PDF Shaper的话就要用到API了吧。
好消息是,在找资料的时候发现了更牛的办法获取指定文件夹中所有PDF文件的页数,代码如下供参考。
  1. Sub Test()
  2.     Dim I As Long
  3.     Dim xRg As Range
  4.     Dim xStr As String
  5.     Dim xFd As FileDialog
  6.     Dim xFdItem As Variant
  7.     Dim xFileName As String
  8.     Dim xFileNum As Long
  9.     Dim RegExp As Object
  10.     Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
  11.     If xFd.Show = -1 Then
  12.         xFdItem = xFd.SelectedItems(1) & Application.PathSeparator
  13.         xFileName = Dir(xFdItem & "*.pdf", vbDirectory)
  14.         Set xRg = Range("A1")
  15.         Range("A:B").ClearContents
  16.         Range("A1:B1").Font.Bold = True
  17.         xRg = "File Name"
  18.         xRg.Offset(0, 1) = "Pages"
  19.         I = 2
  20.         xStr = ""
  21.         Do While xFileName <> ""
  22.             Cells(I, 1) = xFileName
  23.             Set RegExp = CreateObject("VBscript.RegExp")
  24.             RegExp.Global = True
  25.             RegExp.Pattern = "/Type\s*/Page[^s]"
  26.             xFileNum = FreeFile
  27.             Open (xFdItem & xFileName) For Binary As #xFileNum
  28.                 xStr = Space(LOF(xFileNum))
  29.                 Get #xFileNum, , xStr
  30.             Close #xFileNum
  31.             Cells(I, 2) = RegExp.Execute(xStr).Count
  32.             I = I + 1
  33.             xFileName = Dir
  34.         Loop
  35.         Columns("A:B").AutoFit
  36.     End If
  37. End Sub
复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-3-30 17:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
文件格式改成在单元格输入,这样老师的代码用起来可能会更加方便~~
QQ截图20220330175446.png

pdf.rar

22.21 KB, 下载次数: 25

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-30 18:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
丸子不是小孩子 发表于 2022-3-30 17:58
文件格式改成在单元格输入,这样老师的代码用起来可能会更加方便~~

真不错,方便大家使用

TA的精华主题

TA的得分主题

发表于 2022-3-31 11:33 | 显示全部楼层
游乐缘 发表于 2022-3-30 17:53
没有找到VBA控制PDF Shaper的资料,一定要用PDF Shaper的话就要用到API了吧。
好消息是,在找资料的时候 ...

您好,这个VBA正则二进制的获取页码数量的不准,之前试过,特别如是纯图片、coreldraw等图像软件制作的PDF的页数就是不对,有时为0,有时翻倍。非常感谢。
QQ截图20220331112917.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-31 14:27 | 显示全部楼层
limonet 发表于 2022-3-31 11:33
您好,这个VBA正则二进制的获取页码数量的不准,之前试过,特别如是纯图片、coreldraw等图像软件制作的PD ...

哦哦,不太清楚制图软件输出的PDF文件有什么特点。
我现在会的只是用Acrobat获取页数

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-31 15:23 | 显示全部楼层
limonet 发表于 2022-3-31 11:33
您好,这个VBA正则二进制的获取页码数量的不准,之前试过,特别如是纯图片、coreldraw等图像软件制作的PD ...

使用Acrobat获取指定文件夹中PDF文件页数的代码如下,供参考。
  1. Option Explicit
  2. 'Reference -> Acrobat
  3. Sub AcrobatGetNumPages()
  4.     Dim xFd As FileDialog, xFdItem As Variant, xFileName As String
  5.     Dim AcroDoc As Object, cntRow As Integer
  6.    
  7.     Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
  8.     Set AcroDoc = New AcroPDDoc
  9.     If xFd.Show = -1 Then
  10.         xFdItem = xFd.SelectedItems(1) & Application.PathSeparator
  11.         xFileName = Dir(xFdItem & "*.pdf", vbDirectory)
  12.         Range("A:B").ClearContents
  13.         Range("A1:B1").Font.Bold = True
  14.         Range("A1") = "File Name": Range("B1") = "Pages"
  15.         
  16.         cntRow = 2
  17.         While xFileName <> ""
  18.             AcroDoc.Open (xFdItem & xFileName)
  19.             Cells(cntRow, 1) = xFileName
  20.             Cells(cntRow, 2) = AcroDoc.GetNumPages
  21.             AcroDoc.Close
  22.             cntRow = cntRow + 1
  23.             xFileName = Dir
  24.         Wend
  25.     End If
  26.     Columns("A:B").AutoFit
  27.     Set AcroDoc = Nothing
  28. End Sub
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-3-31 17:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
游乐缘 发表于 2022-3-31 15:23
使用Acrobat获取指定文件夹中PDF文件页数的代码如下,供参考。

非常感谢。

TA的精华主题

TA的得分主题

发表于 2022-3-31 17:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
limonet 发表于 2022-3-30 15:29
是的,能不能帮试试?PDF Shaper小巧方便、获取总页数准确,Acrobat嫌他太大了,再次感谢。

请教一下,一般是什么场景需要单纯获取PDF页数,我有几回都看到有人有这个需求,但是没想到什么用处

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-31 17:22 | 显示全部楼层
morpheus126 发表于 2022-3-31 17:14
请教一下,一般是什么场景需要单纯获取PDF页数,我有几回都看到有人有这个需求,但是没想到什么用处

术业有专攻,也许是制图排版领域的需求吧
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 18:24 , Processed in 0.039324 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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