前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python与Microsoft Office

Python与Microsoft Office

作者头像
fanjy
发布2022-03-07 17:47:18
2.5K0
发布2022-03-07 17:47:18
举报
文章被收录于专栏:完美Excel完美Excel

标签:Python,pywin32

Microsoft Office现在已经是我们每天必须使用的软件之一,而Python可用于编写Office脚本(也称为自动化),使用户更容易使用。这可能不像录制宏那么容易,但也不是很复杂。在本文中,将介绍如何使用PyWin32模块访问一些Office程序,并使用Python操作它们。

Python和Microsoft Excel

如果查找使用Python和Office的示例,通常会发现最常涉及到的组件是Excel。事实上,有几个非PyWin32模块专门用于读取和写入Excel文件,它们分别称为xlrd和xlwt,但这篇文章不会谈到它们。在这里,将介绍如何使用PyWin32接口处理Excel。注意,以下脚本仅适用于Windows。而xlrd和xlwt的一个优点是,可以在任何平台上使用它们。

看看一个简单的示例:

上面的例子与通常在网上看到的相似,它实际上基于《Python核心编程》中看到的一个示例。示例中,为了访问Excel,导入win32com.client,然后调用其gencache.EnsureDispatch,传递要打开的应用程序名称。在本例中,要传递的字符串是“Excel.Application”,只需在后台打开Excel即可。此时,除非运行任务管理器,否则用户甚至不知道Excel已打开。下一行是通过调用Excel实例的“Workbooks.Add()”方法将新工作簿添加到Excel,这将返回一个sheets对象。要获得活动表,调用ss.ActiveSheet。最后,通过将Visible属性设置为True,使Excel程序本身可见。

要设置特定单元格的值,调用如下内容:sh.Cells(row,col).Value=“一些值”。注意,我们的实例不是基于零的,实际上会将值放入正确的行/列组合中。如果想提取一个值,只需删除等号。如果想要这个公式呢?为了解决这个问题,在Excel中录制了一个宏,并执行了一个仅粘贴公式的选择性粘贴命令。使用生成的代码,我解决了要在Python中获得的公式,只需执行以下操作:

代码语言:javascript
复制
formula=sh.Cells(row, col).Formula

如果需要改变所在的工作表,怎么办?录制宏也展示了如何完成这一操作。下面是Excel中的VBA代码:

代码语言:javascript
复制
Sub Macro1()
'
' Macro1 Macro
'
Sheets("Sheet2").Select
End Sub

从这段代码中,发现需要调用的sheets对象的“sheets”方法,在稍微修改之后,通过执行以下操作使其在Python中工作:

代码语言:javascript
复制
sheet2 = ss.Sheets(“Sheet2”)

现在,我们在工作簿的第二个工作表上有了一个句柄。如果想编辑或检索值,只需将上面使用的相同方法加在sheet2实例(即sheet2.Cells(1,1).Value)即可。原程序的最后两行将关闭工作表,然后退出整个Excel实例。

可能会想,到目前为止,所展示的只是如何创建一个新文档。如果要打开现有文件,该怎么办?只需在代码开头执行以下操作:

代码语言:javascript
复制
xl =win32.gencache.EnsureDispatch('Excel.Application')
ss = xl.Workbooks.Open(filename)

现在,已经了解了使用Excel的COM对象模型用Python操作Excel的基础知识。如果需要了解更多信息,建议尝试录制宏,然后将结果转换为Python。

Python和Microsoft Word

使用Python访问Microsoft Word遵循与Excel相同的语法。让我们来看看如何访问Word。

这个特别的例子也是基于《Python核心编程》中的一些东西。然而,网络上还有很多类似的例子。示例中,要获得Microsoft Word应用程序的句柄,我们将其称为win32.gencache.EnsureDispatch('Word.Application'),然后通过调用word实例的Documents.Add()添加一个新文档。如果想向用户展示正在做什么,可以将Word的可见性设置为True。

如果要向文档中添加文本,则需要告诉Word要将文本放到哪里。这就是Range方法的用武之地。虽然看不见,但有一个“网格”告诉Word如何在屏幕上布局文本。因此,如果想在文档的最顶端插入文本,告诉它从(0,0)开始。若要在Word中添加新行,需要在字符串末尾附加“\r\n”。

代码的其余部分非常好理解。现在,继续打开和保存文档:

代码语言:javascript
复制
word.Documents.Open(doc)
word.ActiveDocument.SaveAs("c:\\a.txt",FileFormat=win32com.client.constants.wdFormatTextLineBreaks)

这里我们展示如何打开现有Word文档并将其另存为文本。如果要阅读文档中的文本,可以执行以下操作:

代码语言:javascript
复制
docText = word.Documents[0].Content

以上都是非常基础的内容,抛砖引玉,由此开启更深入的学习之旅。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-26,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com