电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python如何操作office實現自動化及win32com.client的運用

瀏覽:65日期:2022-07-31 14:00:39

應用背景

工作中,由于需要出定期的report,需要用到office,主要是要用到excel表格,然后給各個team或者boss發email report。這里邊就包含了不少重復性的工作,工作中常常有一個固定的模板來出report,而每次只需將相關的數據手動導入,如果將這些重復性的動作,實現自動化,無疑可以省去不少功夫。于是我就想到了用python來實現自動化生成表格。今天介紹的只是一部分,主要是excel表格自動修改生成。

似乎是一個很簡單的活,調用常用的與excel相關的python模塊xlrd, xlwd 或者 openpyxl即可,沒錯,這些對excel表格進行簡單操作都很666,但是我的表格里邊出現了透視表,這讓我非常的痛苦,一下子發現上邊的三個模塊不好用,而且用著用著,我還發現,openpyxl似乎是沒有直接刪除行的功能函數,當你復制之前一個表格為基表,更改一部分內容保存后,透視表就消失了,內心是很崩潰的,在谷歌、百度上看了不少帖子,也沒有很好的辦法,最后還是stackoverflow上看到一個帖子里,用到了win32com.client,剛開始看不懂,里邊好多函數都不知道哪里來的,也沒有文檔。

最后發現,win32com.client可以直接調用VBA的庫,這可就強大了,VBA是包含record macro功能的,手動操作excel直接record,你就可以找到對應的函數,然后就可以調用,一下子很多的功能都實現了。

實例

先來看看案例表格:

Python如何操作office實現自動化及win32com.client的運用

Python如何操作office實現自動化及win32com.client的運用

這里只介紹一部分功能實現,也是主要的部分,其余的部分sheet頁操作是類似的,這里會介紹一部分模塊使用的方法。

第一個表格,主要需要從內部共享的文件夾中,去下載需要的Cases,都是文檔類型的文件,需要將它們寫入到表一中的AllCases列中,這里比較簡單,我們只需要用open和readlines(),用遍歷的方式將其寫入到excel表中即可。然后在表二中,刷新透視表。以下我截取部分的代碼,路徑自己構建輸入即可,我將分塊來介紹。

class AutomationReport(object): def __init__(self, excel, win32c, folder_src, folder_dst, src, src_G, src_failed, src_flip, filepath): self.excel = excel self.win32c = win32c self.folder_src = folder_src self.folder_dst = folder_dst self.src = src self.src_G = src_G self.src_failed = src_failed self.src_flip = src_flip self.filepath = filepath def write_AllCases(self): # open one file and write it into excel AllCases sheet with open(self.src, ’r’) as f: wb = self.excel.Workbooks.Open(self.filepath) sheet_AllCases = wb.Worksheets(’AllCases’) i = 2 for case in f.readlines(): cel = ’K%d’ % i sheet_AllCases.Range(cel).Value = case.strip() i = i + 1 # open second file and write it into excel AllCases sheet with open(self.src_G, ’r’) as fg: for case in fg.readlines(): cel = ’K%d’ % i sheet_AllCases.Range(cel).Value = case.strip() i = i + 1 # copy format or delete redundant content cel = ’K%d’ % i if sheet_AllCases.Range(cel).Value is None: rg = 'A%s:J%s' % (i-1, i-1) selection = sheet_AllCases.Range('A29000:J29000').Select selection.AutoFill(Destination=sheet_AllCases.Range(rg), Type=xlFillDefault) else: # delete redundant content while sheet_AllCases.Range(cel).Value is not None: sheet_AllCases.Rows(i).Delete() wb.Save()if __name__ == '__main__': excel = win32com.client.Dispatch(’Excel.Application’) win32c = win32com.client.constants # input your path folder_src = ... ... # Excel table file path filepath = ... # Object instance and invoke functions t = AutomationReport(excel, win32c, folder_src, folder_dst, src, src_G, src_failed, src_flip, filepath) t.copyFile() t.write_AllCases() t.write_ReportRaw()

遍歷文件內容

遍歷文件,寫入cases,代碼如下,用win32com.client模塊(self.excel)打開我們需要修改的表格文件(self.filepath),用wb.Worksheets(‘AllCases’)打開sheet頁’AllCases’,注意Worksheets的W是大寫的,也記得加上s,用f.readlines()來讀取每一行,將每一行用for in 遍歷寫入一個表格,這里邊的Range(‘A1’)表示單元格A1,加上.Value就是它的值。

with open(self.src, ’r’) as f: wb = self.excel.Workbooks.Open(self.filepath) sheet_AllCases = wb.Worksheets(’AllCases’) i = 2 for case in f.readlines(): cel = ’K%d’ % i sheet_AllCases.Range(cel).Value = case.strip() i = i + 1

強大的win32com.client

通過以下這種方式就可以調用VBA的函數模塊了,如果你要用word,更改成 ’ Word.Applicaiton ’ 即可。第一個是啟用excel,第二個用于調用一些VBA中固有的變量,比如調用某個屬性,直接在其前邊加上即可。

excel = win32com.client.Dispatch(’Excel.Application’)win32c = win32com.client.constants

運用這個,我們就可以調用VBA的一些函數模塊,比如刪除行的功能,在openpyxl中,我沒有找到直接刪除行的功能,而win32com,可以采用如下方式進行刪除行:

sheet_AllCases.Rows(i).Delete()

這里邊需要注意的是,VBA中Delete或者很多函數是不加括號調用的,我們在python中,需要添加括號才可以用。

以下是填充上一行的格式,就是我們常用的下拉復制:

rg = 'A%s:J%s' % (i-1, i-1)selection = sheet_AllCases.Range('A29000:J29000').Selectselection.AutoFill(Destination=sheet_AllCases.Range(rg), Type=xlFillDefault)

透視表的功能實現:

def write_ReportRaw(self): # open excel and active sheet wb = self.excel.Workbooks.Open(self.filepath) sheet_ReportRaw = wb.Worksheets(’ReportRaw’) # refresh Pivot table for All cases and Failed Cases sheet_ReportRaw.PivotTables('PivotTable3').PivotCache().Refresh() sheet_ReportRaw.PivotTables('PivotTable4').PivotCache().Refresh() wb.Save()

這些函數,你無需上網去找,可以直接打開excel表格,在view下有一個Macros,采用Record Macros,然后手動去刷新透視表,停止record,view macro就可以看到刷新透視表的代碼了,可以直接copy過來,將相應的參數更改,同時要記得添加括號,上邊中,PivotCache()如果沒加括號,無法使用。

其他的功能,可以根據自己的需要進行調用。

注意點

使用win32com.client可以讓你更加順利的處理各種excel或者word的復雜情況,相比于openpyxl, xlrd, xlwd功能會更加齊全。但使用過程中,也要注意一些點:

前邊說到的,要對函數加括號 python雖然并不是特別在意大小寫,但是使用win32com.client一定要注意大小寫,很多函數如果不區分大小寫,是無法調用的,比如打開excel表格的Open函數,’O’必須大寫,還有wb.Save(),‘S’也必須大寫,而我們使用openpyxl使用小寫即可。 openpyxl在保存時用save(),很多原有的格式圖表是無法保留下來的,比如對excel進行修改,里邊原有的透視表,用openpyxl的save()是無法保存的,但是使用win32com.client的wb.Save()卻是可以保存這些圖表的,這也是更加方便的地方。 關于VBA函數模塊調用,直接采用錄制宏的方式獲取,無需去找文檔,這也是更加方便靈活的地方。

到此這篇關于Python如何操作office實現自動化及win32com.client的運用的文章就介紹到這了,更多相關Python操作office自動化內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: PU树脂_水性聚氨酯树脂_聚氨酯固化剂_聚氨酯树脂厂家_宝景化工 | 烟台金蝶财务软件,烟台网站建设,烟台网络推广 | 手板-手板模型-手板厂-手板加工-生产厂家,[东莞创域模型] | 通用磨耗试验机-QUV耐候试验机|久宏实业百科 | 上海恒驭仪器有限公司-实验室平板硫化机-小型平板硫化机-全自动平板硫化机 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 网站建设-网站制作-网站设计-网站开发定制公司-网站SEO优化推广-咏熠软件 | 硬齿面减速机[型号全],ZQ减速机-淄博久增机械 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 压力变送器-上海武锐自动化设备有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 在线钠离子分析仪-硅酸根离子浓度测定仪-油液水分测定仪价格-北京时代新维测控设备有限公司 | 萃取箱-萃取槽-PVC萃取箱厂家-混合澄清槽- 杭州南方化工设备 | 铝扣板-铝方通-铝格栅-铝条扣板-铝单板幕墙-佳得利吊顶天花厂家 elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | BHK汞灯-百科|上海熙浩实业有限公司 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 成都珞石机械 - 模温机、油温机、油加热器生产厂家 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 气力输送设备_料封泵_仓泵_散装机_气化板_压力释放阀-河南锐驰机械设备有限公司 | 十二星座查询(性格特点分析、星座运势解读) - 玄米星座网 | 长春网站建设,五合一网站设计制作,免费优化推广-长春网站建设 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 精密光学实验平台-红外粉末压片机模具-天津博君 | 振动时效_振动时效仪_超声波冲击设备-济南驰奥机电设备有限公司 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | 烘箱-工业烘箱-工业电炉-实验室干燥箱 - 苏州华洁烘箱制造有限公司 | 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | ptc_浴霸_大巴_干衣机_呼吸机_毛巾架_电动车加热器-上海帕克 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 深圳侦探联系方式_深圳小三调查取证公司_深圳小三分离机构 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 |