xlwings簡介
NOTE:以下僅僅是簡介,我針對自己用到的api進行了總結,詳見官方文檔https://docs.xlwings.org/zh_CN/latest/api.html#books
1. 簡介
目前,市面上能操作excel的第三方python庫有很多,例如:xlrd/xlwt/xlutils、openpyxl等等。但是,這幾個庫都用起來不是很舒服。xlrd/xlwt在讀寫方面速度不是很快,而openpyxl不能操作*.xls文件。所以這次我試用了一下xlwings,感覺不錯,xlsx/xls文件都能讀寫,速度也還可以。
2. 對象層次
xlwings.apps.books.sheets.range
apps: 當前打開的多個excel應用
books: 單個excel應用中打開的多個xls/xlsx文件
sheets: 單個book中的多個sheets
range: 單個sheet中的范圍。eg. range(1, 1)/range('A1')代表第一個單元格
3. app
app = xw.App(visible=True, add_book=False)
:打開一個excel程序。add_book如為True,則打開的excel會默認生成一個新建的bookwb1 = app.books.open(filename)
、wb2 =xw.Book(filename)
:打開一個book。這2種方法都是打開一個book,前者是在一個app中打開,而后者是每打開一個book,都會打開一個appwb1.quit()
:退出,但不會保存
4. book
wb.sheets
:獲得一個book中的所有的sheet的集合wb.sheets(sheetname)
、wb.sheets[index]
:打開一個sheet,前者用sheetname,后者用索引new_wb = wb1.sheets.add(name='newshtname', after='sheet1')
:在sheet1后面新建一張名為newshtname的sheet,並返回給new_wbwb.save()
:保存wb.close()
:關閉
5. sheet
sheet.autofit(axis=None)
:自適應。axis=r(c)則對行(列)做自適應,無參數則對整個sheetcopyed = sht.copy(name='abc', after=sht)
:將sht管理的sheet復制成名為abc的sheet,放在sht的后面,並返回給copyed對象sht.range(r, c)
:返回一個r行c列的單元格。這里的行列的起始索引都是1,這點要注意
6. range
range(r, c)
、range((r1, c1), (r2, c2))
、range('A3')
、range('A1:B5')
:這些都返回sheet里的一片區域range.clear()
、range.clear_contents()
: 前者清除區域的內容和格式,后者僅清除區域內的內容range.color()
:獲取區域內的顏色old_range.copy(new_range)
:將old_range中的內容復制到new_range中。new_range可以是其第一個單元格range.expand(mode='table')
:擴展當前range的范圍。mode默認為table
,但可以取down
,right
,table指的是在行列方向上的擴展,而down/right是行或列的擴展。而且它的擴展是有前提條件的:如果在擴展方向上有空白單元格,則停止擴展range.offset(rowoffset, coloffset)
:返回一個從指定單元格為起始點的區域對象options(convert=None, **options)
:允許用戶設定轉換器和相關的選項。轉換器定義了Excel的區域及其值在讀寫過程中如何轉換。如果沒有明確指定轉換器,會使用基轉換器(base converter)
這個options很強大,主要是進行一些轉換。我目前只用了ndim
,它表示維數。eg.range.options(ndim=2)
可以將一個一維列表轉換成二維,詳見文檔range.resize(row_size=None, column_size=None)
:調整當前range的范圍,和expand
不一樣。調整后范圍為以range的左上角為起點為,高為row_size,寬為column_size的一片區域
結語:之所以會用到xlwings,是因為最近在公司每天都要登記台賬,每天都會花費很長的時間,而且都是機械、重復的動作,所以就寫了個小腳本。以上是我用到的東西,xlwings中還有很多api我沒用到,如Chart/Picture等等。以后有用到再去啃吧……。