python-docx无法处理 “doc格式” 文件,于是我这样做......

Karen110
• 阅读 1495

问题引入

目前的日常工作中,见的最多的还是对Excel文件和 Word文件的处理。对于Excel文件,如果出现xls、xlsx、xlsm混合文件应该怎么处理?对于Word文件,出现doc和docx的混合文件,又该怎么处理。

你可能会用VBA,但是不得不说,批量操作这些文件,还是要学Python,操作真的很简单。

为了增强文章的可读性,我们分2篇文章讲述这些问题。今天,我们讲述的是如何将doc文件 转换为 docx文件。

python-docx无法处理 “doc格式” 文件,于是我这样做......

学了黄同学的原创《Python自动化办公文档》后,你可能知道:我们常用python-docx来处理Word文件。但是,python-docx只能处理“.docx”的Word文件。因此,咱们需要批量将“.doc”文件,批量转换为“.docx”文件后,再进行二次处理。

python-docx无法处理 “doc格式” 文件,于是我这样做......

近日,就有一个女同事让我批量处理一下Word中的内容。这还是头一次处理这样的问题,为了解决这个问题,我只能:① 批量将doc文件,转换为docx文件;② 使用python-docx库,批量处理docx文件。

将doc文件,转换为docx文件

python-docx库,如何处理docx文件,我们的文档中已经为大家进行了详细的解释。今天黄同学就教大家写一段代码,实现这个doc文件转换为docx文件操作。

1)安装win32com库

这里需要做一个说明,如果采用以下方式,无法安装的话。

pip install win32com

那么,就采用下面这个方法进行安装。

python -m pip install pypiwin32

2)win32com库相关语法的说明

这里我们没有什么太高深的代码,只是有些代码怕大家看不懂,因此给大家做一个说明。

# 调用word程序  
WordApp = win32com.client.Dispatch("Word.Application")  

# 后台运行,不显示,不警告  
WordApp.Visible = 0  
WordApp.DisplayAlerts = 0

3)完整代码

这里我们采用“面向过程”的方式,去写这个代码,这样会让代码可读性更强。

import os  
import time  
import win32com  
from win32com.client import Dispatch  

def doc_to_docx(path):  
   w = win32com.client.Dispatch('Word.Application')  
   w.Visible = 0  
   w.DisplayAlerts = 0  
   doc = w.Documents.Open(path)  
   # 这里必须要绝对地址,保持和doc路径一致  
   newpath = allpath+'\\转换后的文档.docx'  
   time.sleep(3) # 暂停3s,否则会出现-2147352567,错误  
   doc.SaveAs(newpath,12,False,"",True,"",False,False,False,False)  
   # doc.Close() 开启则会删掉原来的doc  
   w.Quit()# 退出  
   return newpath  
allpath = os.getcwd()  
print(allpath)  
doc\_to\_docx(allpath+'\\转换前的文档.doc')

最终效果:

python-docx无法处理 “doc格式” 文件,于是我这样做......

**-----**------**-----**---**** End **-----**--------**-----**-****

往期精彩文章推荐:

python-docx无法处理 “doc格式” 文件,于是我这样做......

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/4a1VUzpLy_LadNkMAXMG8A,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
Excel中的xls、xlsx、xlsm混合文件,看我用Python如何统一处理......
引言Python语言,近几年在办公自动化这一领域来说,真的超级火爆!用它做批量处理确实比VBA要方便很多。前面的文章,我们已经讲述了如何将doc文件转换为docx文件,还没有观看的朋友直接戳此链接:(http://mp.weixin.qq.com/s?bizMzkwNDE5NTc0Ng&mid2247514428&idx1&sn1f8720112f6a88
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Python操作Excel
前言:Python操作Excel使用openpyxl模块,python中有好几个与excel相关操作的模块。xlrd库:从excel中读取数据,支持xls、xlsx格式。xlwt库:对excel进行修改操作,不支持对xlsx格式的修改。xlutils库:在xlrd和xlwd中对一个已存在的文件进行修改。openpyxl库:
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
Java多线程导致的的一个事物性问题
业务场景我们现在有一个类似于文件上传的功能,各个子站点接受业务,业务上传文件,各个子站点的文件需要提交到总站点保存,文件是按批次提交到总站点的,也就是说,一个批次下面约有几百个文件。      考虑到白天提交这么多文件会影响到子站点其他系统带宽,我们将分站点的文件提交到总站点这个操作过程独立出来,放到晚上来做,具体时间是晚上7:00到早上7:00。
Python进阶者 Python进阶者
1年前
读取xlsm格式的文件,该表格只有一个,但是通过python读取,却显示两个表格?
大家好,我是皮皮。一、前言前几天在最强王者交流群【wen】问了一个Python处理Excel文件相关的问题,一起来看看吧。请教问题:读取xlsm格式的文件,该表格只有一个名字为"销售明细(2)"的表格,但是通过python读取该文件,却显示两个表格,分别为
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这