最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年04月01日 11:59:36   作者:行走_  
這篇文章主要介紹了Python如何操作office實現自動化及win32com.client的運用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

應用背景

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

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

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

實例

先來看看案例表格:

 

這里只介紹一部分功能實現,也是主要的部分,其余的部分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").Select
selection.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一定要注意大小寫,很多函數如果不區(qū)分大小寫,是無法調用的,比如打開excel表格的Open函數,'O'必須大寫,還有wb.Save(),‘S'也必須大寫,而我們使用openpyxl使用小寫即可。
  • openpyxl在保存時用save(),很多原有的格式圖表是無法保留下來的,比如對excel進行修改,里邊原有的透視表,用openpyxl的save()是無法保存的,但是使用win32com.client的wb.Save()卻是可以保存這些圖表的,這也是更加方便的地方。
  • 關于VBA函數模塊調用,直接采用錄制宏的方式獲取,無需去找文檔,這也是更加方便靈活的地方。

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

相關文章

  • Python3 mmap內存映射文件示例解析

    Python3 mmap內存映射文件示例解析

    這篇文章主要介紹了Python3 mmap內存映射文件示例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • python爬蟲多次請求超時的幾種重試方法(6種)

    python爬蟲多次請求超時的幾種重試方法(6種)

    這篇文章主要介紹了python爬蟲多次請求超時的幾種重試方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 基于python3.7利用Motor來異步讀寫Mongodb提高效率(推薦)

    基于python3.7利用Motor來異步讀寫Mongodb提高效率(推薦)

    Motor是一個異步mongodb driver,支持異步讀寫mongodb。它通常用在基于Tornado的異步web服務器中。這篇文章主要介紹了基于python3.7利用Motor來異步讀寫Mongodb提高效率,需要的朋友可以參考下
    2020-04-04
  • python正則表達式爬取貓眼電影top100

    python正則表達式爬取貓眼電影top100

    這篇文章主要為大家詳細介紹了python正則表達式爬取貓眼電影top100,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • tensorflow1.0學習之模型的保存與恢復(Saver)

    tensorflow1.0學習之模型的保存與恢復(Saver)

    這篇文章主要介紹了tensorflow1.0學習之模型的保存與恢復(Saver) ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 詳解Python遍歷字典的鍵和值

    詳解Python遍歷字典的鍵和值

    這篇文章主要通過一些簡單的示例為大家介紹一下Python中遍歷字典的鍵和值的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-03-03
  • python中循環(huán)語句while用法實例

    python中循環(huán)語句while用法實例

    這篇文章主要介紹了python中循環(huán)語句while用法,實例分析了while語句的使用方法,需要的朋友可以參考下
    2015-05-05
  • Python編程中常見的錯誤及其解決方法總結

    Python編程中常見的錯誤及其解決方法總結

    在開發(fā) Python 程序時,錯誤幾乎是無法避免的,無論是新手還是經驗豐富的開發(fā)者,都可能在編程過程中遇到各種各樣的問題,調試錯誤不僅消耗時間,還可能導致生產環(huán)境出現問題,為了提高調試效率,本文將總結一些 Python 編程中常見的錯誤及其解決方法,并提供實用的調試技巧
    2025-02-02
  • python中opencv?Canny邊緣檢測

    python中opencv?Canny邊緣檢測

    這篇文章主要介紹了python中opencv?Canny邊緣檢測,Canny邊緣檢測是一種使用多級邊緣檢測算法檢測邊緣的方法。OpenCV提供了函數cv2.Canny()實現Canny邊緣檢測。更多相關內容需要的小伙伴可以參考下面文章內容
    2022-06-06
  • Python 通過正則表達式快速獲取電影的下載地址

    Python 通過正則表達式快速獲取電影的下載地址

    這篇文章主要介紹了Python 通過正則表達式快速獲取電影的下載地址,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08

最新評論

兰西县| 应城市| 蓬溪县| 额尔古纳市| 瑞昌市| 忻州市| 平度市| 巴里| 额尔古纳市| 如皋市| 榕江县| 沽源县| 南投县| 呼玛县| 蛟河市| 新干县| 安宁市| 太保市| 康马县| 连山| 邢台市| 丰县| 勃利县| 吉安县| 宜春市| 临江市| 东港市| 法库县| 界首市| 东丰县| 甘谷县| 武隆县| 浦县| 丹寨县| 宜黄县| 黄骅市| 兴海县| 黑水县| 新乡县| 镇江市| 东光县|