成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:118日期: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 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日产精品久久久久久久性色| 国产精品毛片无遮挡高清| 国产一区自拍视频| 久久国产高清| 亚洲午夜精品网| 亚洲欧美日韩一区二区 | 国产伦精品一区二区| 久久久久欧美| 亚洲午夜在线视频| 亚洲理伦在线| 亚洲精品日韩一| 91久久综合| 怡红院av一区二区三区| 午夜宅男久久久| 亚洲免费高清视频在线| 亚洲日韩视频| 国产精品你懂的| 欧美精品一区二区三区在线看午夜| 精品国产一区a| 色综合天天视频在线观看 | 久久永久免费| 日韩av中文在线观看| 欧美中文字幕亚洲一区二区va在线| 秋霞影院一区二区| 欧美在线视频不卡| 久久99精品国产.久久久久| 欧美日韩国产在线播放网站| 国产综合久久久久久久久久久久 | 国产精品视频免费看| 国产精品va| 亚洲美女少妇撒尿| 中文精品视频| 丝袜国产日韩另类美女| 欧美伊人精品成人久久综合97| 麻豆精品在线观看| 在线成人午夜影院| 成人国产精品视频| 久久先锋影音av鲁色资源网| 欧美日韩亚洲免费| 一区二区三区免费看视频| 色综合久久久久综合体| 麻豆国产精品官网| 欧美日韩亚州综合| 国产成人精品免费视频网站| 亚洲国产精选| 有坂深雪av一区二区精品| 久久久夜夜夜| 韩国精品在线观看| 亚洲精品一线二线三线无人区| 牛夜精品久久久久久久99黑人 | 欧美中文字幕亚洲一区二区va在线 | 在线电影欧美成精品| av一二三不卡影片| 亚洲三级在线免费| 99国产精品久久久久久久久久久| 国产欧美日韩中文久久| 国产欧美丝祙| 国内精品国产成人| 26uuu国产在线精品一区二区| 国产综合自拍| 午夜影院久久久| 3d动漫精品啪啪1区2区免费| 欧美精品国产一区二区| 午夜欧美一区二区三区在线播放| 欧美日韩高清一区二区| 成人性生交大合| 色婷婷综合五月| 国产精品1024久久| 国产精品久久夜| 蜜桃久久精品乱码一区二区| 国产一区二区三区| 国产精品女上位| 久久综合九色综合久99| 国产精品亚洲第一| 国产精品入口麻豆原神| 午夜在线精品偷拍| 国产精品主播直播| 国产精品不卡视频| 久久久精品午夜少妇| 国产成人丝袜美腿| 日本一区二区成人| 色综合久久久久久久| 成人激情免费电影网址| 一区二区三区精品久久久| 欧美日韩精品高清| 你懂的视频一区二区| 日韩精品色哟哟| 久久欧美一区二区| 性感少妇一区| 成人18精品视频| 一区二区免费看| 7777女厕盗摄久久久| 黄色一区三区| 久久91精品久久久久久秒播| 国产精品女同一区二区三区| 在线视频一区二区三区| 色综合色综合色综合色综合色综合 | 欧美精品久久久久久久久老牛影院| 欧美日产一区二区三区在线观看| 免费在线观看日韩欧美| 国产亚洲欧美日韩日本| 色先锋资源久久综合| 欧美日韩国语| 国内成人免费视频| 亚洲在线观看免费| 欧美一区二区三区在线观看视频 | 亚洲高清在线| 国产成人午夜精品影院观看视频| 一区二区三区精密机械公司| 精品嫩草影院久久| 媚黑女一区二区| 午夜欧美理论片| 国产麻豆精品theporn| 一区2区3区在线看| 久久久久久黄色| 欧美无乱码久久久免费午夜一区| 激情视频一区二区| 国产91丝袜在线18| 亚洲国产日韩精品| 国产蜜臀97一区二区三区| 欧美色视频在线| 精久久久久久| 不卡的av电影在线观看| 美女视频黄频大全不卡视频在线播放| 国产精品初高中害羞小美女文| 欧美一二三区精品| 色悠悠亚洲一区二区| 国产精品成人观看视频免费| 国产乱码精品1区2区3区| 亚洲一区二区视频在线观看| 日韩精品一区二区三区四区| 色婷婷久久久亚洲一区二区三区| 91麻豆高清视频| 免费日本视频一区| 亚洲三级在线看| 国产欧美一二三区| 91精品国产综合久久精品图片| 色成年激情久久综合| 亚洲精品乱码| 99精品视频免费在线观看| 激情偷乱视频一区二区三区| 亚洲午夜免费福利视频| 国产精品久久久久一区二区三区| 日韩欧美成人一区| 欧美日韩免费一区二区三区视频| 久久福利影视| 一本综合久久| 欧美日韩一区在线观看视频| 成人综合在线观看| 免费日本视频一区| 午夜久久福利影院| 亚洲综合一区在线| 亚洲欧美在线另类| 欧美激情中文字幕一区二区| 精品久久一区二区三区| 日韩一区二区三区高清免费看看| 欧美日韩在线播放一区| 久久久久一区| 国产视频不卡| 最新国产乱人伦偷精品免费网站| 欧美午夜免费| 欧美性事免费在线观看| 欧美一区网站| 成人免费视频caoporn| 国产麻豆成人传媒免费观看| 久久国产人妖系列| 裸体一区二区三区| 日本不卡一二三| 午夜婷婷国产麻豆精品| 一二三区精品福利视频| 亚洲免费观看高清| 亚洲激情成人在线| 亚洲精品日韩一| 亚洲伊人伊色伊影伊综合网| 亚洲免费色视频| 亚洲色图欧美偷拍| 亚洲人成7777| 亚洲免费高清视频在线| 国产精品成人一区二区三区夜夜夜 | 亚洲一区av在线| 亚洲宅男天堂在线观看无病毒| 亚洲综合在线第一页| 亚洲韩国精品一区| 丝袜美腿亚洲色图| 另类中文字幕网| 国产精品自拍在线| www.色综合.com| 91一区二区在线| 欧美日韩国产一区精品一区| 欧美久色视频| 好吊色欧美一区二区三区视频| 亚洲午夜在线| 国产视频不卡| 久久午夜影视| 欧美中文字幕不卡| 在线成人免费视频| 26uuu亚洲综合色欧美| 中文字幕乱码日本亚洲一区二区| 中文字幕一区二区三区四区不卡 | 中文字幕成人网|