办公自动化 python,python办公自动化教程excel
在应用后台工作中,由于需要定期的报表,需要办公,主要是用excel表格,然后把邮件报表发给各个团队或者老板。这里有很多重复性的工作。工作中往往有一个固定的模板来生成报表,而每次的相关数据只是手工导入。如果将这些重复的动作自动化,无疑会节省很多精力。于是想到了用python自动生成表格。今天介绍的只是一部分,主要是excel表格的自动修改和生成。
看似很简单的工作,调用excel相关的常用python模块xlrd、xlwd或openpyxl即可。没错,excel表上的这些简单操作都是666,但是我的表里面有一个透视表,让我很痛苦。突然发现上面三个模块不好用,就用了。我还发现,Openpyxl好像是一个不直接删行的函数函数。标致的大白菜抄了前面的表作为基表。改了一些内容保存后,透视表不见了,里面坏了。在谷歌和百度上看了很多帖子,都没有很好的解决办法。最后在stackoverflow上看到一个帖子,一开始用的是win32com.client,我看不懂。里面很多功能都不知道从哪里来的,也没有文档。
最后发现win32com.client可以直接调用VBA的库,功能强大。VBA包含记录宏的功能。可以通过手动操作excel直接记录找到对应的函数,然后就可以调用了。一下子实现了很多功能。
先看一下案例表:
这里只介绍部分功能实现,也是主要部分。其余的单页操作类似。这里将介绍一些模块使用的方法。
第一个表,主要需要从内部共享文件夹下载需要的案例,是一个文档类型文件,需要写入表1的AllCases列。这里比较简单。我们只需要使用open和readlines()以遍历的方式将其写入excel表中。然后在表2中,刷新数据透视表。下面我截取一部分代码,自己构建输入就行了,分块介绍。
类自动化报表(object):def _ _ init _ _(self,excel,win32c,folder_src,folder_dst,src,src_G,src_failed,src_flip,文件路径):self。excel=excel self。win32 c=win32 c自身。folder _ src=folder _ src自身。dst=文件夹_ dst自身。src=src _ G self。src _ failed=src _ failed self。src _ flip=src工作表( all cases )I=2 for case in f . read lines():cel= K % d % I sheet _ all cases .范围(细胞).Value=case.strip() i=i 1 #打开第二个文件,用打开(self.src_G, r )作为fg:用于fg中的情况。readlines():cel= K % d % I sheet _ all cases .范围(细胞).Value=case.strip() i=i 1 #复制格式或删除冗余内容cel=K%d % i if sheet_AllCases .范围(细胞).值为None: rg=A%s:J%s % (i-1,i-1) selection=sheet_AllCases .范围( A29000:J29000 ).选择选择。自动填充(Destination=sheet_AllCases .Range(rg),Type=xlFillDefault)else:# sheet _ all cases时删除多余内容。范围(细胞).值不是无:工作表_所有案例.行.删除()wb .save()if _ _ name _ _== _ _ main _ _ :Excel=win32 com。客户。调度( Excel .application )win32c=win32 com。客户。常数#输入您的路径folder_src=.# Excel表格文件路径文件路径=.#对象实例和调用函数t=AutomationReport(excel,win32c,folder_src,folder_dst,src,src_G,src_failed,src_flip,文件路径)t . copy file()t . write _ all cases()t . write _ ReportRaw()遍历文件内容遍历文件,写入案例,代码如下,用win32com.client模块(self.excel)打开我们需要修改的表格文件(self.filepath),用wb .工作表("所有案例")打开表页所有情况,注意工作表的W是大写的,也记得加上s,用f.readlines()来读取每一行,将每一行用因为在遍历写入一个表格,这里边的范围( A1 )表示单元格A1,加上。价值就是它的值。
用open(self.src, r )作为f:WB=self。excel。练习册。开放(自我。文件路径)sheet _ all cases=WB .工作表( all cases )I=2 for case in f . read lines():cel= K % d % I sheet _ all cases .范围(细胞).Value=case.strip() i=i 1强大的win32com.client通过以下这种方式就可以调用使用的函数模块了,如果你要用词,更改成词。应用即可。第一个是启用excel,第二个用于调用一些使用中固有的变量,比如调用某个属性,直接在其前边加上即可。
Excel=win32 com。客户。调度( Excel .application )win32c=win32 com。客户。常数运用这个,我们就可以调用使用的一些函数模块,比如删除行的功能,在安装中,我没有找到直接删除行的功能,而win32com,可以采用如下方式进行删除行:
工作表_所有案例。行.删除()这里边需要注意的是,VBA中删除或者很多函数是不加括号调用的,我们在大蟒中,需要添加括号才可以用。
以下是填充上一行的格式,就是我们常用的下拉复制:
rg=A%s:J%s % (i-1,i-1)selection=sheet_AllCases .范围( a 29000:j 29000 ).选择选择。自动填充(目标=工作表_所有案例).范围(rg),Type=xlFillDefault)透视表的功能实现:
def write_ReportRaw(self): #打开excel和活动工作表WB=self . excel . workbooks . open(self . file path)sheet _ ReportRaw=WB。工作表( ReportRaw) #刷新所有案例和失败案例的数据透视表sheet_ReportRaw。数据透视表(“数据透视表3”)。PivotCache()。refresh()Sheet _ report raw . pivot tables( pivot table 4 )。pivotcache()。refresh () wb.save()这些函数,不需要去网上找,直接打开excel表,视图下有一个宏,使用记录宏,然后手动刷新透视表,停止记录,查看宏,就可以看到刷新透视表的代码。可以直接复制,更改相应的参数。同时,记得加括号。中间上方的PivotCache()没有括号就不能用。
其他函数可以根据自己的需要调用。
注意win32com.client的使用,可以让你更流畅的处理excel或者word的各种复杂情况。与OpenPyXL、XLRD、XLWD相比,它的功能会更加齐全。但在使用过程中,我们也应该注意一些要点:
如前所述,您应该将函数括起来。python不特别注意大小写,但是使用win32com.client时一定要注意大小写很多函数如果不区分大小写就无法调用,比如打开excel电子表格的Open函数。o必须大写,wb。Save()和 S 也必须大写,而我们在使用openpyxl时可以用小写。Openpyxl在保存时使用save()。很多原始格式的图表无法保存。比如修改excel的时候,里面原来的透视表不能用openpyxl的save()保存,而是wb。win32com.client的Save()可以保存这些图表,这也是一个比较方便的地方。至于VBA功能模块调用,是通过录制宏直接获取的,不需要找文档,这也是一个比较方便灵活的地方。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。