在python中通过win32com调用VBA,完成word支持的文档格式间相互转换

2023-11-01 05:59

本文主要是介绍在python中通过win32com调用VBA,完成word支持的文档格式间相互转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用python完成文档格式转换有很多库可以用,例如pdfkit可实现html转换为pdf,mammoth可实现word转html等文件格式的转换,这些库有些转换效果不错,有些库转换后会发生格式丢失等问题,转换效果差强人意,而且需要学习的新知识较多。考虑到word应用程序本身即可打开和保存docx、html、txt等多种格式文件,因此,如果可以在python代码中直接操作word来打开和另存文件,这显然是最方便的文档格式转换方案。幸运的是,win32com库给我们提供了在python代码中操作word的功能。这样,我们只需掌握VBA的Documents.Open()方法和Document.SaveAs2()方法,就可以在win32com库的支持下轻松完成word支持的文档格式之间的相互转换。以下介绍使用win32com库操作word转换文档格式的方法。

由于word默认在打开非默认格式文档时会打开文件转换对话框要求确认,为了防止确认文件格式转换中断python代码的执行,在正式写代码之前我们先要打开word选项,确认下图的设置中“打开时确认文件格式转换”选项是否取消了选中。

 准备工作完成后,可以开始编写转换文件格式的代码了:

import win32com # 导入win32com库,pip install pypiwin32
from win32com.client import constants as wc # 导入相关常量def convert_format(word, source_file, dest_file, source_format, dest_format):'''文件格式转换函数Args:word:word应用程序对象source_file:待转换格式的源文件,不在当前目录需带文件路径dest_file:转换后的目标文件,可指定路径,未指定路径则保存在当前目录source_format:源文件格式,参见VBA文档WdOpenFormat枚举值dest_format:目标文件格式,参见VBA文档WdSaveFormat枚举值'''# 调用VBA对象Documents的Open方法打开source_file,有必要的话传入文件绝对路径doc = word.Documents.Open(FileName = source_file, Format=source_format)try:# 对网页文件进行一些设定,具体含义可访问https://docs.microsoft.com/zh-cn/office/vba/api/查阅VBA文档word.ActiveDocument.WebOptions.RelyOnCSS = 1word.ActiveDocument.WebOptions.OptimizeForBrowser = 1word.ActiveDocument.WebOptions.BrowserLevel = 0 # constants.wdBrowserLevelV4word.ActiveDocument.WebOptions.OrganizeInFolder = 0word.ActiveDocument.WebOptions.UseLongFileNames = 1word.ActiveDocument.WebOptions.RelyOnVML = 0word.ActiveDocument.WebOptions.AllowPNG = 1# 将文件另存为目标文件格式,完成格式转换word.ActiveDocument.SaveAs2( FileName =dest_file, FileFormat = dest_format)# 完成转换后原document对象已经指向目标格式文件print('完成了文件{0}的转换'.format(doc.Name))finally:# 关闭文档doc.Close()source_file = 'test.html'
dest_file = 'test.docx'# 打开word应用程序
#word = win32com.client.Dispatch('Word.Application')
# 或者使用下面的方法,使用启动独立的进程:
# word = win32com.client.DispatchEx('Word.Application')
# 如果文件格式参数传入VBA常量出错,应当用下面的方法打开word应用程序
word = win32com.client.gencache.EnsureDispatch('Word.Application')# 后台运行,不显示,不警告
word.Visible = 0
word.DisplayAlerts = 0# 调用文件格式转换函数,将一个html文件转换为docx文件。
convert_format(word, source_file, dest_file, source_format = wc.wdOpenFormatWebPages,dest_format = wc.wdFormatDocumentDefault)# 退出word
word.Quit()

在使用win32com库操作word时应当注意VBA函数第一个字母通常大写,与python通用规范有所区别,不要出现函数名称输入错误。以下是复制Documents对象的Open()方法和Document对象的SaveAs2()方法的文档,以供灵活运用以上代码时参考:

Documents.Open 方法 (Word)

打开指定的文档并将其添加到 Documents 集合。 返回一个 Document 对象。

语法

expression.Open (FileName、 ConfirmConversions、 ReadOnly、 AddToRecentFiles、 PasswordDocument、 PasswordTemplate、 Revert、 WritePasswordDocument、 WritePasswordTemplate、 Format、 Encoding、 Visible、 OpenConflictDocument、 OpenAndRepair、 DocumentDirection、 NoEncodingDialog)

expression 是必需的。 一个Documents对象变量。

参数

名称必需/可选数据类型说明
FileName必需Variant文档名(可包含路径)。
ConfirmConversions可选VariantTrue 显示 转换文件 对话框中,如果该文件不是 Microsoft Word 格式。
ReadOnly可选Variant为 True,则以只读方式打开文档。 此参数不会覆盖已保存文档的只读推荐设置。 例如,如果在打开只读推荐设置的情况下保存文档,则将 ReadOnly 参数设置为 False 将不会导致文件以读/写方式打开。
AddToRecentFiles可选Variant 要将文件名添加到列表中最近使用的文件在 文件 菜单的底部。
PasswordDocument可选Variant打开文档时所需的密码。
PasswordTemplate可选Variant打开模板时所需的密码。
Revert可选Variant控制如果 FileName 是打开文档的名称会进行什么操作。 为 True,则放弃对打开文档的任何未保存更改并重新打开文件。 为 False,则激活打开的文档。
WritePasswordDocument可选Variant用于保存文档更改的密码。
WritePasswordTemplate可选Variant用于保存模板更改的密码。
Format可选Variant用于打开文档的文件转换器。 可为以下 WdOpenFormat 常量之一。 默认值为 wdOpenFormatAuto。 若要指定外部文件格式,请将 OpenFormat 属性应用于 FileConverter 对象,以确定要与此参数一起使用的值。
Encoding可选Variant当你查看保存的文档时 Microsoft Word 所使用的文档编码(代码页或字符集)。 可以是任何有效的 MsoEncoding 常量。 要查看有效 MsoEncoding 常量的列表,请参阅“Visual Basic 编辑器”中的“对象浏览器”。 默认值是系统代码页。
Visible可选Variant如此 如果在可见窗口中打开文档。 默认值为 True 。
OpenConflictDocument可选Variant指定是否打开具有脱机冲突的文档的冲突文件。
OpenAndRepair可选Variant如果该属性为 True ,则修复文档,以防止文档毁坏。
DocumentDirection可选WdDocumentDirection表示文档中的横排文字。 默认值为 wdLeftToRight
NoEncodingDialog可选Variant为 True,如果无法识别文本编码,则跳过显示 Word 所显示的“编码”对话框。 默认值为 False

返回值

Document对象

Document.SaveAs2 方法 (Word)

使用新的名称或格式保存指定的文档。 此方法的一些参数与 “另存为” 对话框(“文件” 选项卡)中的选项相对应。

语法

expression.SaveAs2_FileName_ , _FileFormat_ , _LockComments_ , _Password_ , _AddToRecentFiles_ , _WritePassword_ , _ReadOnlyRecommended_ , _EmbedTrueTypeFonts_ , _SaveNativePictureFormat_ , _SaveFormsData_ , _SaveAsAOCELetter_ , _Encoding_ , _InsertLineBreaks_ , _AllowSubstitutions_ , _LineEnding_ , _AddBiDiMarks_ , _CompatibilityMode_ )

expression:一个document对象变量

参数

名称必需/可选数据类型说明
FileName可选Variant文档的名称。 默认值为当前文件夹和文件名。 如果从未保存过文档,将使用默认名称(例如,Doc1.doc)。 如果已经存在具有指定文件名的文档,则覆盖该文档,并且在覆盖前不提示用户。
FileFormat可选Variant文档的保存格式。 可以是任意 WdSaveFormat 常量。 若要以另一种格式保存文档,请为 FileConverter 对象的 SaveFormat 属性指定适当的值。
LockComments可选Variant如果为 True,则锁定文档注释。 默认值为 False
Password可选Variant用于打开文档的密码字符串。 (请参阅下面的“备注”。)
AddToRecentFiles可选Variant如果为 True,则将文档添加到“文件”菜单上最近使用的文件列表中。 默认值为 True
WritePassword可选Variant用于保存文档更改的密码字符串。 (请参阅下面的“备注”。)
ReadOnlyRecommended可选Variant如果为 True,则每次打开文档时,Microsoft Word 都将建议采用只读方式。 默认值为 False
EmbedTrueTypeFonts可选Variant如果为 True,则 TrueType 字体随文档一起保存。 如果省略,则 EmbedTrueTypeFonts 参数将假定为 EmbedTrueTypeFonts 属性的值。
SaveNativePictureFormat可选Variant如果该属性值为 True,则对于从其他系统平台(如 Macintosh)导入的图形,只保存其 Microsoft Windows 版本。
SaveFormsData可选Variant如果为 True,则将用户在窗体中输入的数据保存为记录。
SaveAsAOCELetter可选Variant如果文档包含附加的邮件,当该属性值为 True 时,将文档存为 AOCE 信函(同时保存邮件)。
Encoding可选Variant用于另存为编码文本文件的文档的代码页或字符集。 默认为系统代码页。 不能将所有 MsoEncoding 常量 用于此参数。
InsertLineBreaks可选Variant在将文档保存为文本文件时,如果该属性值为 True,则在每一行文本后插入换行符。
AllowSubstitutions可选Variant将文档保存为文本文件时,如果该属性值为 True,则 Word 可以将一些符号替换为相似的文本。 例如,将版权符号显示为 (c)。 默认值为 False
LineEnding可选VariantWord 在另存为文本文件的文档中标记换行符和分段符的方式。 可以是下列 WdLineEndingType 常量之一: wdCRLF (或 wdCROnly) wdCROnly
AddBiDiMarks可选Variant如果为 True,则为输出文件添加控制符,以保留原始文档中文本的双向版式。
CompatibilityMode可选Variant打开文档时,Word 使用的兼容性模式。 WdCompatibilityMode 常量。
重要说明
默认情况下,如果没有为此参数指定任何值,则 Word 输入值 0,这会指定应保留文档的当前兼容性模式。

返回值

下面是WdSaveFormat枚举值:

名称说明
wdFormatDocument0Microsoft Office Word 97 - 2003 二进制文件格式.
wdFormatDOSText4Microsoft DOS 文本文件格式.
wdFormatDOSTextLineBreaks5Microsoft DOS 保留带换行符的文本文件格式.
wdFormatEncodedText7编码的文本格式.
wdFormatFilteredHTML10过滤HTML格式.
wdFormatFlatXML19Open XML file format saved as a single XML file.
wdFormatFlatXMLMacroEnabled20Open XML file format with macros enabled saved as a single XML file.
wdFormatFlatXMLTemplate21Open XML template format saved as a XML single file.
wdFormatFlatXMLTemplateMacroEnabled22Open XML template format with macros enabled saved as a single XML file.
wdFormatOpenDocumentText23OpenDocument Text format.
wdFormatHTML8标准 HTML format.
wdFormatRTF6富文本格式 (RTF).
wdFormatStrictOpenXMLDocument24Strict Open XML document format.
wdFormatTemplate1Word template format.
wdFormatText2Microsoft Windows text format.
wdFormatTextLineBreaks3Windows text format with line breaks preserved.
wdFormatUnicodeText7Unicode text format.
wdFormatWebArchive9Web archive format.
wdFormatXML11Extensible Markup Language (XML) format.
wdFormatDocument970Microsoft Word 97 文档格式.
wdFormatDocumentDefault16Word 默认文档文件格式也就是DOCX格式.
wdFormatPDF17PDF 格式.
wdFormatTemplate971Word 97 template format.
wdFormatXMLDocument12XML 文档格式.
wdFormatXMLDocumentMacroEnabled13XML document format with macros enabled.
wdFormatXMLTemplate14XML template format.
wdFormatXMLTemplateMacroEnabled15XML template format with macros enabled.
wdFormatXPS18XPS format.

下面是WdOpenFormat枚举值

名称说明
wdOpenFormatAllWord6与 Word 早期版本向后兼容的 Microsoft Word 格式。
wdOpenFormatAuto0现有格式。
wdOpenFormatDocument1Word 格式。
wdOpenFormatEncodedText5编码文本格式。
wdOpenFormatRTF3RTF 格式。
wdOpenFormatTemplate2用作 Word 模板。
wdOpenFormatText4未编码的文本格式。
wdOpenFormatOpenDocumentText18 (&H12)OpenDocument 文本格式。
wdOpenFormatUnicodeText5Unicode 文本格式。
wdOpenFormatWebPages7HTML 格式。
wdOpenFormatXML8XML 格式。
wdOpenFormatAllWordTemplates13Word 模板格式。
wdOpenFormatDocument971Microsoft Word 97 文档格式。
wdOpenFormatTemplate972Word 97 模板格式。
wdOpenFormatXMLDocument9XML 文档格式。
wdOpenFormatXMLDocumentSerialized14打开 XML 文件格式保存为一个 XML 文件。
wdOpenFormatXMLDocumentMacroEnabled10启用了宏的 XML 文档格式。
wdOpenFormatXMLDocumentMacroEnabledSerialized15打开 XML 文件格式启用了宏保存为一个 XML 文件。
wdOpenFormatXMLTemplate11XML 模板格式。
wdOpenFormatXMLTemplateSerialized16 (&H10)单个文件保存为 xml 格式的开放 XML 模板格式。
wdOpenFormatXMLTemplateMacroEnabled12启用了宏的 XML 模板格式。
wdOpenFormatXMLTemplateMacroEnabledSerialized17 (&H11)打开 XML 模板启用了宏格式另存为单个的 XML 文件。

这篇关于在python中通过win32com调用VBA,完成word支持的文档格式间相互转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/320962

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',