引言
在使用 mammoth.js 进行文档读取的时候,如果目标文件不是 docx 格式的文档则无法进行解析,因此我们需要使用 Microsoft Office 或者 WPS 将文件重新导出进行格式转换,但是如果需要进行格式转换的文件很多的话,这样做难免效率过低,所以我们可以考虑在 Microsoft Office 中使用 VBA(Visual Basic for Applications) 来进行脚本处理。
开始
首先第一步我们要创建一个 .docm
格式的文档并打开
编写脚本
- 打开文件后我们使用快捷键
alt+F11
打开 VBA 窗口(如果宏被 禁用的话先启用宏) - 在菜单栏找到插入(Insert) 然后点击模块(Module)
- 在新插入的模块内填写以下代码
Sub TranslateDocIntoDocx()
Dim objWordApp As New Word.Application
Dim objDoc As Word.Document
Dim strFolder As String
Dim strFile As String
Dim strOutputFolder As String
Dim count As Long
Dim fso As Object
' 初始化计数器
count = 0
' 获取当前文档的路径
strFolder = ThisDocument.Path & "\"
strOutputFolder = strFolder & "output\"
Set fso = CreateObject("Scripting.FileSystemObject")
' 检查 output 文件夹是否存在,如果不存在则创建
If Not fso.FolderExists(strOutputFolder) Then
fso.CreateFolder strOutputFolder
End If
' 遍历 .doc 文件并转换为 .docx
strFile = Dir(strFolder & "*.doc")
Do While strFile <> ""
With objWordApp
Set objDoc = .Documents.Open(strFolder & strFile, AddToRecentFiles:=False, ReadOnly:=True, Visible:=False)
objDoc.SaveAs2 strOutputFolder & fso.GetBaseName(strFile) & ".docx", FileFormat:=wdFormatXMLDocument
objDoc.Close
End With
count = count + 1
' 获取下一个文件
strFile = Dir()
Loop
' 清理对象
Set objDoc = Nothing
Set objWordApp = Nothing
Set fso = Nothing
' 显示转换结果
MsgBox "执行完成,共转换了: " & count & " 个文件"
End Sub
运行脚本
在我们创建的 .docm
格式的文档的根目录放一些 .doc
格式的文件后在 VBA 窗口运行写好模块
如果成功执行,模块脚本执行结束后会弹窗提示执行完成,共转换了: n 个文件
,转换好的文件会放在根目录新创建的 output
文件夹中