Word VBA批量格式转换:docx转pdf、doc、rtf、txt以及反向转换

from–https://blog.csdn.net/pijianzhirui/article/details/78668695

有时候需要把大量的docx文件另存为其它格式,比如pdf、doc、rtf、txt,或者反向转换,可以用VBA批量处理。启动word,按下Alt+F11,打开Microsoft Visual Basic for Applications,点击 插入>模块,将下面的代码粘贴进去,然后按F5(某些笔记本电脑可能需要按Fn+F5),或者点击图中的绿色小三角形,便可以执行代码。代码中涉及到的路径要根据自己的实际情况进行修改。pdf文件除了能保持复杂的排版和数学公式不走样,还可以再借助Adobe Acrobat(不是Adobe Reader)另存为png、jpg等图片格式(pdf文件的每一页会成为一张单独的图片)。因为word本身不能直接另存为图片,所以需要借助pdf中转。下面的代码中用到了open函数,并且为名为Visible的参数赋值为msoFalse(msoFalse前面共有11个英文逗号),目的是打开文件时不在word窗口中显示文件的内容,加快转换速度。尝试过使用Application.ScreenUpdating = False来实现与Visible=msoFalse相同的效果,然而并不可行,不知是什么原因。Replace的作用是修改后缀名,SaveAs2的作用是“另存为”。

PowerPoint的批量转换参见 https://blog.csdn.net/pijianzhirui/article/details/85936272
Excel的批量转换参见 https://blog.csdn.net/pijianzhirui/article/details/85939896

还有一个名为Office Tool Plus(官网:https://otp.landian.vip/zh-cn/)的工具也可以进行批量格式转换。

  1. ‘docx转pdf、doc、rtf、txt
  2. Option Explicit
  3. Sub docx2other()
  4. On Error Resume Next
  5. Dim sEveryFile As String,sSourcePath As String,sNewSavePath As String
  6. Dim CurDoc As Object
  7. sSourcePath = “E:\DOCX文件\”
  8. ‘假定待转换的docx文件全部在”E:\DOCX文件\”下,你需要按实际情况修改。
  9. sEveryFile = Dir(sSourcePath &”*.docx”)
  10. Do While sEveryFile <> “”
  11. Set CurDoc = Documents.Open(sSourcePath & sEveryFile, , , , , , , , , , , msoFalse)
  12. sNewSavePath = VBA.Strings.Replace(sSourcePath & sEveryFile, “.docx”, “.pdf”)
  13. ‘如果想导出doc/rtf/txt等,就把上一行行尾的pdf换成doc/rtf/txt
  14. ‘转化后的文件也在”E:\DOCX文件\”下,当然你可以按需修改。
  15. CurDoc.SaveAs2 sNewSavePath, wdFormatPDF
  16. ‘pdf对应wdFormatPDF,doc对应wdFormatDocument,rtf对应wdFormatRTF,txt对应wdFormatText
  17. ‘更多格式可参见文末的截图WdSaveFormat Enumeration
  18. CurDoc.Close SaveChanges:=False
  19. sEveryFile= Dir
  20. Loop
  21. Set CurDoc = Nothing
  22. End Sub
  1. ‘pdf、doc、rtf、txt转docx
  2. Option Explicit
  3. Sub other2docx()
  4. On Error Resume Next
  5. Dim sEveryFile As String,sSourcePath As String,sNewSavePath As String
  6. Dim CurDoc As Object
  7. sSourcePath = “E:\PDF文件\”
  8. ‘假定待转换的pdf文件全部在”E:\PDF文件\”下,你需要按实际情况修改。
  9. sEveryFile = Dir(sSourcePath &”*.pdf”)
  10. Do While sEveryFile <> “”
  11. Set CurDoc = Documents.Open(sSourcePath & sEveryFile, , , , , , , , , , , msoFalse)
  12. CurDoc.Convert
  13. sNewSavePath = VBA.Strings.Replace(sSourcePath & sEveryFile, “.pdf”, “.docx”)
  14. ‘要把doc/rtf/txt转为docx,则把上面第9行和第13行两处”.pdf”改为”.doc”/”.rtf”/”.txt”
  15. ‘转化后的文件也在”E:\PDF文件\”下,当然你可以按需修改。
  16. CurDoc.SaveAs2 sNewSavePath, wdFormatDocumentDefault
  17. CurDoc.Close SaveChanges:=False
  18. sEveryFile = Dir
  19. Loop
  20. Set CurDoc = Nothing
  21. End Sub

pdf转docx时很容易报错,比如“运行时错误’5121’:抱歉,在将您的 PDF 转化为 Word 文档时遇到问题。(xxx.pdf)”转换速度非常慢,有时候还会让word卡死,于是只能用任务管理器结束掉word。注意观察是哪个PDF文件导致卡死,然后把这个PDF文件挪到别的文件夹,不要再让word进行转化了,试试用Adobe Acrobat转换。在word 2016中测试,即使是扫描版(纯图片)PDF,word 2016也能进行文字识别,不确定更低版本的word能否将pdf转为docx,以及能否进行文字识别。


以下为一些函数的介绍。

上一篇
下一篇