Doc批量转成Docx

在工作中遇到需要将word文档中的doc转换成docx的需求,一共有大几百个文件,这种就不太可能一个个去转换了,文件太多效率太低了。

VBA环境

经过一顿查找之后确定使用Office的VBA(Microsoft Visual Basic for Applications)去做相应转换,它是Office自带的,一般不需要额外安装,转换之后兼容性也比较好。VBA环境开启步骤:

  1. 打开任意一个word文档,Office版本
  2. 按下Alt+F11快捷键即可看到VBA的编译环境

语法

这里需要一定的编程功底,如果不熟悉VBA的语法,需要一边学习、一边实现业务功能,下面给出相关资料:

  • 官网VBA语言概述
  • 官网VBA基本语法文档
  • 易百教程VBA语法文档

转换程序

弹窗选择源路径

运行脚本,通过弹窗选择需要转换文件的根路径:

Sub ConvertDocToDocx()
'Updated by ExtendOffice 20181128Dim xDlg As FileDialogDim xFolder As VariantDim xFileName As StringApplication.ScreenUpdating = FalseSet xDlg = Application.FileDialog(msoFileDialogFolderPicker)If xDlg.Show <> -1 Then Exit SubxFolder = xDlg.SelectedItems(1) + "\"xFileName = Dir(xFolder & "*.doc", vbNormal)While xFileName <> ""Documents.Open FileName:=xFolder & xFileName, _ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, _PasswordDocument:="", PasswordTemplate:="", Revert:=False, _WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _wdOpenFormatAuto, XMLTransform:=""ActiveDocument.SaveAs xFolder & Replace(xFileName, "doc", "docx"), wdFormatDocumentDefaultActiveDocument.ClosexFileName = Dir()WendApplication.ScreenUpdating = True
End Sub

存在的问题:

  1. 生成的docx文件与原有的doc文件混在一起
  2. 生成的第一个docx还被再次被执行一次转换,逻辑上存在bug

完整脚本

实现了一下的几个功能,在此之前需要添加引用:Microsoft Scripting Runtime

  1. 生成的docx与原有的doc分开,存在一个同级的文件夹中
  2. 实现了文件夹的循环遍历,根目录下的所有doc都会被找出来执行转换
Attribute VB_Name = "模块2"
Sub main()Dim fso As New FileSystemObject  '定义一个文件系统对象Dim fld As FolderDim xDlg As FileDialogDim xDirNam As StringApplication.ScreenUpdating = FalseSet xDlg = Application.FileDialog(msoFileDialogFolderPicker)If xDlg.Show <> -1 Then Exit SubxDirName = xDlg.SelectedItems(1)If fso.FolderExists(xDirName) Then        '判断文件是否存在Set fld = fso.GetFolder(xDirName)ScanDirs fld         '调用函数ElseMsgBox "文件夹不存在"End IfMsgBox "转换完成"Application.ScreenUpdating = True
End SubSub ScanDirs(fld As Folder)'递归遍历文件夹Dim fil As File, outFld As Folder    '定义一个文件夹和文件变量Set subfiles = fld.Files()     '获取文件夹下所有文件Set SubFolders = fld.SubFolders      '获取文件夹下所有文件夹ConvertDocToDocx fld.Path    '检查根目录是否有需要转换的For Each outFld In SubFolders    '遍历文件夹ConvertDocToDocx outFld.PathScanDirs outFld      '调用函数自身Next
End SubSub ConvertDocToDocx(xDirName As String)'doc转换成docxDim xFolder As VariantDim xSaveFolder As VariantDim xFileName As StringxFolder = xDirName + "\"xSaveFolder = xDirName + "_docx\"If Dir(xFolder) <> "" And Dir(xSaveFolder) = "" Then MkDir xSaveFolder '判断文件夹是否存在,不存在则创建。xFileName = Dir(xFolder & "*.doc", vbNormal)While xFileName <> ""Documents.Open FileName:=xFolder & xFileName, _ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, _PasswordDocument:="", PasswordTemplate:="", Revert:=False, _WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _wdOpenFormatAuto, XMLTransform:=""ActiveDocument.SaveAs xSaveFolder & Replace(xFileName, "doc", "docx"), wdFormatDocumentDefaultActiveDocument.ClosexFileName = Dir()Wend
End Sub

Word转换脚本(Doc批量转Docx),可以直接导入这个脚本运行,无需复制黏贴了。

一次选中单个、多个指定的doc文件转换

Attribute VB_Name = "模块5"
Sub doc2docx()  'doc文件转docx文件
Dim myDialog As FileDialog, oFile As Variant
Set myDialog = Application.FileDialog(msoFileDialogFilePicker)
With myDialog.Filters.Clear    '清除所有文件筛选器中的项目.Filters.Add "所有 WORD97-2003 文件", "*.doc", 1    '增加筛选器的项目为所有WORD97-2003文件.AllowMultiSelect = True    '允许多项选择If .Show = -1 Then    '确定For Each oFile In .SelectedItems    '在所有选取项目中循环With Documents.Open(oFile).SaveAs FileName:=Replace(oFile, "doc", "docx"), FileFormat:=12.CloseEnd WithNextEnd If
End With
End Sub

Word转换脚本(Doc可多选),可以直接导入这个脚本运行,无需复制黏贴了。

后记

VBA还支持转txt、pdf、xls等不同类型文件的读取、解析等一些列操作,这些需要对VBA比较熟悉。

参考资料:

  • 如何批量doc/ppt/xls转docx/pptx/xlsx?
  • VBA遍历指定文件夹的所有文件(包括子目录)
  • 批量将doc转为docx,只能多选doc文件,无法已文件夹为单位去选择。
  • 批量将doc转为docx,可以选中多个doc文件执行转换操作。

Doc批量转成Docx相关推荐

  1. word文档doc格式转换成docx

    把doc格式转换成docx jar包下载 //把doc格式转换成docx//导入 Spire.Doc.jarDocument d = new Document("F:\\**\\**\\云想 ...

  2. python批量把doc文件转换成docx

    # -*- coding:utf-8 -*- import os import time from win32com import clientdef doc_to_docx(list_dir, sa ...

  3. poi doc转docx_文件批量操作之.doc转成.docx

    "❤希望通过Python编程,替代你去做耗时耗力耗心的事情. 让你在烦忙的学习生活中,给自己一些和自己相处的时间, 也给自己一些和家人在一起的时间❤" win32com模块实现批量 ...

  4. 使用python将doc的word文件转换成docx文件

    文章目录 一.学习目标: 二.直接转换代码: 一.学习目标: 主要之前使用python提起word的docx的文件的数据.但是今天发现,如果是doc后缀的word文件,会报错,这样就无法提取数据了,然 ...

  5. 使用word批量将.docx(或者.doc)转成.pdf

    1.打开word,按下alt+F11,打开Microsoft Visual Basic for Applications: 2.点击"插入",再点击"模块",将 ...

  6. python 替换word内容 doc转换成docx

    python 替换word内容 doc转换成docx doc转换成docx 北京市,天津市,上海市,重庆市,河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河 ...

  7. doc文档转docx格式,方便对文件进行批量处理【附代码】

    大家知道微软的office,相信doc的格式也大家耳熟能详,doc格式是微软office的word文档的早期格式,但是doc针对使用python进行批量处理时候,是有很多问题.比如:doc格式是以二进 ...

  8. docx批量转换成html,Batch DOCX to HTML Converter(批量docx转换HTML工具)

    Batch DOCX to HTML Converter 功能强大,能够将docx文件转换为html格式,支持批量转换,转换的速度很快,操作也很简单,通过软件转换的html网页格式更加方便用户进行网页 ...

  9. python 根据word生成ppt_未明学院:利用Python将Wordamp;PPT批量转成PDF

    Python中的许多库,像一个个具有不同功能的"工具",能帮助我们解决工作中的不同问题,提高工作效率! 本期将继续为大家放松python中的实用技能,本期的主题是:利用Python ...

最新文章

  1. 数据中设计中的范式与反范式
  2. android 自定义控件(FloatLabelLayout)
  3. 序列标注问题中将分类标签引入RNN网络结构的尝试
  4. Windows系统USB转CDC串口驱动限制说明
  5. 矩形分割(洛谷P1324题题解,Java语言描述)
  6. python 坐标轴刻度 格式_matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)...
  7. springMVC实现增删改查
  8. Unicode 字符集下不同类型数据下的转换
  9. php 便利字符串,Go语言遍历字符串——获取每一个字符串元素
  10. xp系统qq安装不上网络连接服务器,xp系统安装QQ提示“安装文件失败”如何解决...
  11. ocr 神经网络,神经网络crop
  12. python输出最大的素数_Python:求X的最大素数
  13. 为什么从移动携号转网到了联通,来电显示是中国移动?
  14. 用计算机打一闪一闪亮晶晶,一闪一闪亮晶晶 我去!RGB轴机械键盘灯光玩法亮瞎人...
  15. html去除页面的滑动条
  16. 获取cookies(pyppeteer)
  17. android格式化手机号正则,Android中手机号、车牌号正则表达式大全
  18. MAX8722 CCFL背光控制器
  19. 下载安装钱德拉望远镜的软件CIAO
  20. 基于STM8S003f3的单键触摸开关制作

热门文章

  1. 什么是事件驱动(EDA)
  2. webSevice基础学习
  3. x86移位SHL、SHR、SAL、ROL、RCR等指令
  4. 谈谈分布式多智能体中的显式协调机制
  5. android 支持各种格式的阅读器,android txt小说阅读器的实现(完美实现分页阅读,支持常见编码格式)...
  6. Linux执行命令常用命令4.0
  7. 原生Mysql之and和or混合使用
  8. PAT (Basic Level) Practise (中文)1062. 最简分数(20)
  9. 【答学员问】培训班毕业的linux运维的女生,如何找到运维工作?
  10. SHARC库函数cfft_mag详解