Doc批量转成Docx
Doc批量转成Docx
在工作中遇到需要将word文档中的doc转换成docx的需求,一共有大几百个文件,这种就不太可能一个个去转换了,文件太多效率太低了。
VBA环境
经过一顿查找之后确定使用Office的VBA(Microsoft Visual Basic for Applications)去做相应转换,它是Office自带的,一般不需要额外安装,转换之后兼容性也比较好。VBA环境开启步骤:
- 打开任意一个word文档,Office版本
- 按下
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
存在的问题:
- 生成的docx文件与原有的doc文件混在一起
- 生成的第一个docx还被再次被执行一次转换,逻辑上存在bug
完整脚本
实现了一下的几个功能,在此之前需要添加引用:Microsoft Scripting Runtime
- 生成的docx与原有的doc分开,存在一个同级的文件夹中
- 实现了文件夹的循环遍历,根目录下的所有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相关推荐
- word文档doc格式转换成docx
把doc格式转换成docx jar包下载 //把doc格式转换成docx//导入 Spire.Doc.jarDocument d = new Document("F:\\**\\**\\云想 ...
- python批量把doc文件转换成docx
# -*- coding:utf-8 -*- import os import time from win32com import clientdef doc_to_docx(list_dir, sa ...
- poi doc转docx_文件批量操作之.doc转成.docx
"❤希望通过Python编程,替代你去做耗时耗力耗心的事情. 让你在烦忙的学习生活中,给自己一些和自己相处的时间, 也给自己一些和家人在一起的时间❤" win32com模块实现批量 ...
- 使用python将doc的word文件转换成docx文件
文章目录 一.学习目标: 二.直接转换代码: 一.学习目标: 主要之前使用python提起word的docx的文件的数据.但是今天发现,如果是doc后缀的word文件,会报错,这样就无法提取数据了,然 ...
- 使用word批量将.docx(或者.doc)转成.pdf
1.打开word,按下alt+F11,打开Microsoft Visual Basic for Applications: 2.点击"插入",再点击"模块",将 ...
- python 替换word内容 doc转换成docx
python 替换word内容 doc转换成docx doc转换成docx 北京市,天津市,上海市,重庆市,河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河 ...
- doc文档转docx格式,方便对文件进行批量处理【附代码】
大家知道微软的office,相信doc的格式也大家耳熟能详,doc格式是微软office的word文档的早期格式,但是doc针对使用python进行批量处理时候,是有很多问题.比如:doc格式是以二进 ...
- docx批量转换成html,Batch DOCX to HTML Converter(批量docx转换HTML工具)
Batch DOCX to HTML Converter 功能强大,能够将docx文件转换为html格式,支持批量转换,转换的速度很快,操作也很简单,通过软件转换的html网页格式更加方便用户进行网页 ...
- python 根据word生成ppt_未明学院:利用Python将Wordamp;PPT批量转成PDF
Python中的许多库,像一个个具有不同功能的"工具",能帮助我们解决工作中的不同问题,提高工作效率! 本期将继续为大家放松python中的实用技能,本期的主题是:利用Python ...
最新文章
- 数据中设计中的范式与反范式
- android 自定义控件(FloatLabelLayout)
- 序列标注问题中将分类标签引入RNN网络结构的尝试
- Windows系统USB转CDC串口驱动限制说明
- 矩形分割(洛谷P1324题题解,Java语言描述)
- python 坐标轴刻度 格式_matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)...
- springMVC实现增删改查
- Unicode 字符集下不同类型数据下的转换
- php 便利字符串,Go语言遍历字符串——获取每一个字符串元素
- xp系统qq安装不上网络连接服务器,xp系统安装QQ提示“安装文件失败”如何解决...
- ocr 神经网络,神经网络crop
- python输出最大的素数_Python:求X的最大素数
- 为什么从移动携号转网到了联通,来电显示是中国移动?
- 用计算机打一闪一闪亮晶晶,一闪一闪亮晶晶 我去!RGB轴机械键盘灯光玩法亮瞎人...
- html去除页面的滑动条
- 获取cookies(pyppeteer)
- android格式化手机号正则,Android中手机号、车牌号正则表达式大全
- MAX8722 CCFL背光控制器
- 下载安装钱德拉望远镜的软件CIAO
- 基于STM8S003f3的单键触摸开关制作
热门文章
- 什么是事件驱动(EDA)
- webSevice基础学习
- x86移位SHL、SHR、SAL、ROL、RCR等指令
- 谈谈分布式多智能体中的显式协调机制
- android 支持各种格式的阅读器,android txt小说阅读器的实现(完美实现分页阅读,支持常见编码格式)...
- Linux执行命令常用命令4.0
- 原生Mysql之and和or混合使用
- PAT (Basic Level) Practise (中文)1062. 最简分数(20)
- 【答学员问】培训班毕业的linux运维的女生,如何找到运维工作?
- SHARC库函数cfft_mag详解