巧用python win32com模塊操作excel文件

2021-02-13 小小爬蟲師

  Python操作excel文件的第三方庫有很多,小爬就常用openPyxl庫來操作已有的excel文件,它對xlsx、xlsm等格式的支持都較好。可openPyxl也有不足,它難以實習VBA中的很多功能。如果我們平日裡對VBA語法很熟悉,則可以通過win32com.client來操縱excel文件,語法非常類似。

  之所以不直接使用VBA,是因為VBA擅長跟excel打交道,不擅長跟外部應用打交道。小爬最近就遇到這樣一個自動化場景:先利用python爬蟲的方法,獲取到伺服器端的多個excel文件,然後對這些excel文件進行跨表操作,單純的VBA實現起來比較繁瑣,用python和VBA各實現一部分不利於腳本的封裝,割裂感較強。

  話不多說,我們看看如何用win32com來控制excel,首先我們需要用pip安裝pywin32庫,之後就可以使用了:

下面的代碼演示了一些常規的語法操作,與vba如出一轍,只是需要代碼pythonic:

import win32com.client
import os
base_dir=os.path.dirname(os.path.abspath(__file__)) # 獲取當前路徑
xlApp = win32com.client.Dispatch('Excel.Application')
xlApp.Visible=1 # 顯示excel界面
filename="test.xlsx"
fullPath=os.path.join(base_dir,filename) # 得到完整的filepath
xlBook = xlApp.Workbooks.Open(fullPath, ReadOnly = False) #打開對飲的excel文件
sht = xlBook.Worksheets('Sheet1') # 打開對應名稱的sheet
sht.UsedRange.ClearContents() # 對當前使用區域清除內容
nrows=sht.UsedRange.Rows.Count # 獲取使用區域的行數
sht.UsedRange.Copy() #複製
sht.Activate() # 激活當前工作表

光這些還不夠,比如我們希望實現excel的複製&粘貼值操作,vba的語法類似這樣:

Sub 宏1()
'
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub

這段VB風格的代碼如何pythonic且不出錯呢,你可能首先會想這樣改造:

    Range("A1").Select()
Selection.CurrentRegion.Select()
Selection.Copy()
Selection.PasteSpecial(Paste=xlPasteValues, Operation=xlNone, SkipBlanks=False, Transpose=False)

VBA中默認你操作的當前worksheet,所以可以直接使用Range對象,Selection對象,但是python中不能直接這樣簡寫,改造和簡化後應該是:

    sht.Range("A1").CurrentRegion.Copy()
    sht.Range("A1").CurrentRegion.PasteSpecial(Paste=xlPasteValues, Operation=xlNone, SkipBlanks=False, Transpose=False)

    其實這樣還是會報錯,因為python並無法知道xlPasteValues、xlNone這些常量到底為多少,因為我們沒有提前定義它。如何查詢這些常量實際的值,一個簡單的方法還是通過VBA的對象瀏覽器,打開excel,按住快捷鍵Alt—+F11進入VBE界面,見下圖:

 有了這些,上面的偽代碼就可以改成如下形式,成功運行通過:

sht.cells(1,1).PasteSpecial(Paste=-4163, Operation=-4142, SkipBlanks=False, Transpose=False)

    小爬知道了這些後,想用分列功能將excel某列文本型數值轉為常規的數值格式,操作如動態所示:

vba代碼示例如下:

    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 1), TrailingMinusNumbers:=True

  我們故技重施,可以查到xlDelimited、xlDoubleQuote 這些常量的值,但是這個Array(1, 1) 怎麼轉化為python語法,小爬目前還沒找到合適的方法,有知道的童鞋,可以留言區告訴我,謝謝~

    上面的例子說明,上文提到的方法有一定局限性。其實我們可以利用選擇性粘貼(乘以1)來達到同樣的效果:文本型數字轉常規數值,演示動圖如下:

     這段方法,需要藉助一個輔助單元格,將其賦值1,待操作完畢後,再清空該輔助單元格的值即可,這個用VBA代碼示例如下:

Range("B2").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("B2").Select
    Selection.Copy
    Range("A2:A20").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
        SkipBlanks:=False, Transpose:=False

    這次,我們可以用上面的方法得到xlPasteAll、xlMultiply等常量的值,將上面的代碼python化即可;

    利用這個方法,我們還可以很輕易得到某一列的最後一行的行號,比如A列的,可以這樣寫:

max_rowA=sht.cells(sht.Rows.Count,1).End(-4162).Row

        這回,你應該能看出來上面代碼中的-4162 是怎麼來的了。

        希望上面列舉的示例,能給各位希望用python win32com.client來操作excel文件的童鞋,一點點借鑑和提示!還不趕緊動手試試?

相關焦點

  • 詳解Python操作Excel文件
    地址:https://xlsxwriter.readthedocs.io/xlswriter支持.xlsx文件的寫。支持VBA。寫入大.xlsx文件時使用內存優化模式。7.win32comwin32com庫存在於pywin32中,是一個讀寫和處理Excel文件的庫。
  • Python Excel 辦公自動化系列——win32com/pandas庫使用詳解
    06 Python openpyxl 讀取 寫入 修改 操作Excel07 Python xlswriter 寫入 操作Excel08 Python win32com 讀取 寫入 修改 操作Excel09 Python pandas 讀取 寫入 操作Excel
  • 實例15:用Python批量轉換doc文件為docx文件
    然後就可以讓python-docx模塊盡情發揮了。手動另存為,需要逐個打開doc文件,然後點擊「文件」->「另存為」,在彈出的「另存為」對話框中,將「保存類型」選擇為「.docx」類型,然後保存。如果有100個文件,那得操作100次,很費時間。
  • 手把手教你使用python的zipfile模塊巧解word批量生成問題
    問題一:模塊安裝錯誤,文章中import docx,我誤以為pip install docx就行了,而調用Document類時,發現模塊下無該類,遂進行百度,應當時pip install python-docx,import docx。
  • 講一講我是如何通過Python實現辦公自動化的
    自動化辦公無非是excel、ppt、word、郵件、文件處理、數據分析處理、爬蟲這些,今天我們主要來講講excel、ppt、word自動化的操作技巧。迭代 迭代過程、迭代器、生成器、生成器表達式文件操作 open()函數、read、readline、readlines、write...方法os模塊 處理系統文件和目錄模塊 模塊導入、常用標準模塊、常用第三方庫
  • Python自動化用這些知識點就夠了!
    open()函數、read、readline、readlines、write...方法os模塊處理系統文件和目錄模塊模塊導入、常用標準模塊、常用第三方庫錯誤和異常try/except語句面向對象簡單掌握面向對象概念即可語法是關鍵,一定要理解python編程的基本概念,再去學其他的工具庫。
  • 14-用Python 讀寫 Excel 文件
    和R這樣的分析工具了XlsxWriterxlrd&xlwt[2]OpenPyXL[3]Microsoft Excel API[4]介紹可以創建 Excel 2007 或更高版本的 XLSX 文件即 python-excel,含 xlrd、xlwt 和 xlutils 三大模塊,分別提供讀、寫和其他功能可以讀寫 Excel 2007 XLSX 和 XLSM 文件直接通過 COM
  • python生成excel文件的三種方式
    來源:經授權轉自 AI碼科技(ID:eleven_bmw)作者 :臭榴槤在我們做平常工作中都會遇到操作excel,那麼今天寫一篇,如何通過python操作excel當然python操作excel的庫有很多,比如pandas,xlwt/xlrd,openpyxl等,每個庫都有不同的區別,具體的區別,大家一起來看看吧~xlrd是對於Excel進行讀取,xlrd 操作的是
  • Excel文件另類操作,如何用Python中xlrd模塊獲取電子表格的信息
    前面內容,我們介紹了Python使用openpyxl模塊對Excel文件進行操作的一些案例。喜歡的小夥伴可以關注我,看下往期的內容。今天,我們來詳細了解下Python處理Excel文件的另外一種模塊xlrd模塊。
  • 34個Python自動化辦公庫
    3.xlrd 庫官網:https://pypi.python.org/pypi/xlrd特點:在 python 中,xlrd 庫是一個很常用的讀取 excel 文件的庫,其對 excel 文件的讀取可以實現比較精細的控制。
  • n種方式教你用python讀寫excel等數據文件
    點擊上方「濤哥聊Python」,選擇「星標」公眾號重磅乾貨,第一時間送達來源:Python大數據分析python處理數據文件的途徑有很多種,可以操作的文件類型主要包括文本文件(csv、txt、json等)、excel
  • n種方式教你用Python讀寫Excel等數據文件
    內存不夠時使用,一般不太用readlines()   :一次性讀取整個文件內容,並按行返回到list,方便我們遍歷2. 內置模塊csvpython內置了csv模塊用於讀寫csv文件,csv是一種逗號分隔符文件,是數據科學中最常見的數據存儲格式之一。csv模塊能輕鬆完成各種體量數據的讀寫操作,當然大數據量需要代碼層面的優化。
  • Python 操作 Excel 報表自動化指南!
    Python Excel庫對比我們先來看一下python中能操作Excel的庫對比(一共九個庫):1. Python xlrd 讀取 操作Excel1.1 xlrd模塊介紹xlrd模塊可以用於讀取Excel的數據,速度非常快,推薦使用!
  • python操作excel文件一站式搞定
    1,相關模塊介紹2,查看是否已經安裝相關模塊3,安裝相關模塊4,會查看當前目錄5,會在excel中正確寫入文件路徑6,操作Excel中的三大對象(book,sheet,cell)1,相關模塊介紹xlrd庫:從Excel中讀取數據,支持xls、xlsx,前2個字母表示excel文件
  • 通過python-pptx模塊操作ppt文件
    ppt的設計是一門大學問,無論是設計技巧,還是操作方法,都衍生出了專門的課程。 本文主要介紹python操作ppt的技巧,編程的優勢在於處理速度,對於高大上的ppt設計,還是需要"以人為本", 所以該模塊的使用場景主要是ppt基本元素的提取和添加,適合大量內容的轉化,比如word轉ppt, 減少大量繁瑣的人工操作,儘管提供了一些基本的樣式設計,但是並不能滿足日常辦公對ppt美觀性的要求。
  • csv文件讀寫操作 | pyhton內置csv模塊
    python也內置了csv模塊,用來操作csv文件。一、csv模塊寫入數據writer(csvfile,dialect=『excel』,**fmtparams)csvfile:文件對象dialect:編碼風格,默認為是excel,也就是用逗號(,)分隔,一般不去更改它。
  • Python利用openpyxl處理excel文件(openpyxl的安裝及簡介)
    但是試想,如果把上述excel公式變成諸如python中的if-else結構,其可讀性肯定是不容置疑的……今天,我們來介紹一款excel處理利器—openpyxl(python庫文件)。>(四)對excel文件中單元格及行列的操作;(五)在excel文件中公式及圖表的簡單操作;(六)在excel文件中印表機及列印選項設置;(七)使用Pandas和Numpy在excel中進行數據操作。
  • 基於Python實現對各種數據文件的操作
    常見的數據文件類型如下:txtcsvexcel(xls\xlsx)在線網頁數據pdf\word其他數據軟體格式1 txt文件更多參考:https://docs.python.org/3/tutorial/inputoutput.html
  • 整理了34個Python自動化辦公庫!
    https://pypi.python.org/pypi/xlrd特點:在 python 中,xlrd 庫是一個很常用的讀取 excel 文件的庫,其對 excel 文件的讀取可以實現比較精細的控制。https://pypi.org/project/xlwt/特點:類比於 xlrd 的 reader,那麼 xlwt 就相對於 writer,而且很純正的一點就是它只能對 Excel 進行寫操作。