日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發(fā)布時間:2023/12/20 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】 更棒的Excel操作模块xlwings 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【xlwings】

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

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

  另外最近我遇到的需求就是,基于一個Excel模板,往里面填充數(shù)據(jù)。雖然可以將模板轉化為xlwt的代碼寫死在生成腳本中,但是每次都要重新生成一個文件未免太過麻煩,而且一個格子一個格子地寫入會讓代碼量飛速上漲。。無奈之下另尋他路,嘗試著用了xlwings這個模塊。

?

■  基本使用

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

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

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

?

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

sheet.activate sheet.charts sheet.indexsheet.api sheet.clear sheet.namesheet.autofit sheet.clear_contents sheet.namessheet.book sheet.delete sheet.picturessheet.cells sheet.impl sheet.range
...等等

?

  其中activate,autofit,cliear_content等這些方法都還挺有意思的。最為核心的方法應該就是range了,通過它可以獲取到具體的某一段范圍的數(shù)據(jù)。

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

  更加imba的一種做法是sheet.range('A1:C3')這樣的形式可以一次性獲取到一個區(qū)域內所有單元格的對象。調取其value對象的話得到的也是一個二維列表形式的數(shù)據(jù)集合,可以形象方便地把Excel中的數(shù)據(jù)映射到python中來。對于設置數(shù)據(jù)時,傳入數(shù)據(jù)可以是一個不符合指出區(qū)域規(guī)定的結構,但是這樣結果會比較微妙。。建議實驗

  需要指出的是和xlrd一樣,讀取value時合并單元格只在其左上角的子單元格中有值,其余的和未填寫的單元格一樣,都是None。

?

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

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

range.add_hyperlink range.clear_contents range.countrange.address range.color range.current_regionrange.api range.column range.endrange.autofit range.column_width range.expandrange.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所在區(qū)域的區(qū)域表達,這個比較難描述,好比一個Excel中互相連接的單元格都是連城一片,兩個片之間沒有任何相鄰就是互相獨立的。

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

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

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

  

■  關于App

  其實App還沒有仔細研究過,簡單來說,當通過xw.Book創(chuàng)建一個實例的時候,默認向xw.apps中添加一個App實例,而book就屬于這個App。

  如上面所說,解決Excel程序無法關閉的問題可以用這個app實例的kill方法。app.kill()可以把Excel程序連同文件一并關閉。另外,如果不想讓Excel程序跳出來則可以置app.visible=False,即時設置即時生效。

  由于通常我們的操作基于Book類對象,當完成操作book.save之后,如果想要關掉Excel,可以調用book.app.kill()或者book.app.quit(),但在這之前不要book.close(),否則會報錯哦。(推薦使用quit,使用kill的話有些excel打開軟件比如WPS會記錄下非正常的退出狀態(tài),當再次打開這個文檔的時候就會報錯說有錯誤。如果第二次仍然使用xlwings打開,而錯誤提示的對話框占據(jù)了焦點,會使得xlwings無法正常使用)。

  

?

轉載于:https://www.cnblogs.com/franknihao/p/8514634.html

總結

以上是生活随笔為你收集整理的【Python】 更棒的Excel操作模块xlwings的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。