【Python】 更棒的Excel操作模組xlwings

來源:互聯網
上載者:User

標籤:none   往裡面   應該   address   img   工作表   python   log   color   

【xlwings】

  說到Python操作Excel,有好多模組都可以支援這個工作。比如最底層的win32模組不僅可以操作Excel,還可以操作其他一眾windows的軟體。

  其他的比較熟悉的有xlrd,xlwt和xlutils這三個。分別負責Excel檔案的讀、寫、讀寫轉換工作。雖然一般情況下的Excel操作都可以通過這三個模組來完成,但是還是有很多不便的地方。比如儲存格格式的寫入和讀取很麻煩,通過xlutils將一個Excel讀取再寫入到一個新檔案中時格式也不會被一起複製過去。

  另外最近我遇到的需求就是,基於一個Excel模板,往裡面填充資料。雖然可以將模板轉化為xlwt的代碼寫死在產生指令碼中,但是每次都要重建一個檔案未免太過麻煩,而且一個格子一個格子地寫入會讓代碼量飛速上漲。。無奈之下另尋他路,嘗試著用了xlwings這個模組。

 

■  基本使用

  和xlrd等不同,xlwings設計的基礎理念不是面向單個的Excel文檔進行的,而是可以處理一個包含了多個Excel文檔的“Excel項目”。通過建立其app等邏輯組分概念,可以讓整個Excel項目可以更加有序方便地進行計算和互相通訊。xlwings中設計的各個模型的概念層級如所示:

  其中App是作為一個邏輯的分組,一個Book可以認為對應一個Excel文檔,Sheet對應一張工作表,Range對應具體表中的一片地區的內容。首先,下面是一個最為常見的,開啟一個Excel文檔並進行處理的簡單過程:

import xlwings as xwbook = xw.Book(‘/path/to/test.xlsx‘)# 此時介面上會彈出Excel視窗,如果test.xlsx檔案不存在則會報錯,如果test.xlsx已經被開啟,直接返回這個檔案對象print book.name,book.fullname    # 列印檔案名和絕對路徑print book.app    # 可以查看book所在哪個APPprint book.sheets    # 又是一個類列表結構,存放各種Sheet對象book.activate()    # 如果Excel沒有獲得當前系統的焦點,調用這個方法可以回到Excel中去book.close()    # 關閉Excel文檔,但只是關閉檔案本身,不關閉excel程式。。若要關閉Excel程式則需要調用響應APP執行個體的kill方法。經過實驗,先調用close會導致預設建立的app執行個體自動消失,從而無法調用kill,從而關不掉Excel
所以最好的辦法不是調用這個close而是調用app.kill()。
sheet = book.sheets[0]# 其他擷取sheet對象的方法還有book.sheets[‘sheet_name‘]

 

  上面說到了擷取一個具體的sheet,然一個sheet可以調用的方法有:

 sheet.activate       sheet.charts         sheet.index sheet.api            sheet.clear          sheet.name sheet.autofit        sheet.clear_contents sheet.names sheet.book           sheet.delete         sheet.pictures sheet.cells          sheet.impl           sheet.range
...等等

 

  其中activate,autofit,cliear_content等這些方法都還挺有意思的。最為核心的方法應該就是range了,通過它可以擷取到具體的某一段範圍的資料。

  例如sheet.range(‘A1‘)擷取到A1儲存格的對象,通過調取此對象的value屬性,就可以讀取/改變儲存格的值,並且這一切都不會影響儲存格本身的格式。

  更加imba的一種做法是sheet.range(‘A1:C3‘)這樣的形式可以一次性擷取到一個地區內所有儲存格的對象。調取其value對象的話得到的也是一個二維列表形式的資料集合,可以形象方便地把Excel中的資料對應到python中來。對於設定資料時,傳入資料可以是一個不符合指出地區規定的結構,但是這樣結果會比較微妙。。建議實驗

  需要指出的是和xlrd一樣,讀取value時合併儲存格只在其左上方的子儲存格中有值,其餘的和未填寫的儲存格一樣,都是None。

 

■  對於range,能做的還有更多

  除了簡單的調用value和為value賦值來讀寫Excel外,還有如下介面可以使用

 range.add_hyperlink  range.clear_contents range.count range.address        range.color          range.current_region range.api            range.column         range.end range.autofit        range.column_width   range.expand range.clear          range.columns        range.formula
...等等

 

  一些介面的用法提示:

  range.add_hyperlink(‘https://www.baidu.com‘,‘百度‘)

       range.color = (128,128,128)    RGB通道顏色,可擷取or設定

  range.row/column  擷取第幾行/列,注意是第幾而不是下標

  range.formula  可以設定計算運算式,用來進行表內計算

  range.current_region  返回當前range所在地區的地區表達,這個比較難描述,好比一個Excel中互相串連的儲存格都是連城一片,兩個片之間沒有任何相鄰就是互相獨立的。

  range.count  返回這個range中共有多少儲存格,合併儲存格仍然按未合并的算

  range.offset(a,b)  擷取到當前range向右a格,向下移動b格同樣大小的那片地區,ab可以為負值

  range.rows/columns  返回行/列的各個range對象

  

■  關於App

  其實App還沒有仔細研究過,簡單來說,當通過xw.Book建立一個執行個體的時候,預設向xw.apps中添加一個App執行個體,而book就屬於這個App。

  如上面所說,解決Excel程式無法關閉的問題可以用這個app執行個體的kill方法。app.kill()可以把Excel程式連同檔案一併關閉。另外,如果不想讓Excel程式跳出來則可以置app.visible=False,即時設定即時生效

  

 

【Python】 更棒的Excel操作模組xlwings

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.