Python与Microsoft Office

2022-03-07 17:47:18 浏览数 (1)

标签: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中添加新行,需要在字符串末尾附加“rn”。

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

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

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

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

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

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

0 人点赞