超全整理|Python 操作 Excel 庫 xlwings 常用操作詳解!

大家好,我是早起。
在之前的文章中我們曾詳細(xì)的講解了如何使用openpyxl 操作Excel,其實在Python中還有其他可以直接操作 Excel 文件的庫,如 xlwings、xlrd、xlwt 等等,本文就將講解另一個優(yōu)秀的庫xlwings
開頭還是想說一下,各個庫之間沒有明確的好壞之分,每個庫都有其適合的應(yīng)用場景,并且xlwings 和 openpyxl 許多區(qū)別決定了它們的能力是互為補充:
“
xlwings:需要安裝有 Excel 軟件,支持.xls和.xlsx格式;可以調(diào)用 Excel 文件中 VBA 寫好的程序;和matplotlib以及pandas的兼容性強”
openpyxl:不需要 Excel 軟件,僅支持.xlsx格式
安裝
xlwings 是一個非標(biāo)準(zhǔn)庫,需要在命令行中安裝,在終端(Mac)/命令行(Win)使用pip安裝即可,一般不會出現(xiàn)什么問題。
pip?install?xlwings
前置知識
對 xlwings 的核心理解就在于下面這張圖:
可以看到,和 xlwings 直接對接的是 apps,也就是 Excel 應(yīng)用程序,然后才是 工作簿 books 和工作表 sheets,這點和 openpyxl 有較大區(qū)別,也正是因為此,xlwings 需要依然安裝有 Excel 應(yīng)用程序的環(huán)境
代碼詳解
一、打開Excel程序
使用app打開
import?xlwings?as?xw
app?=?xw.App(visible=True,?add_book=False)?#?程序可見,只打開不新建工作薄
app.display_alerts?=?False?#?警告關(guān)閉
app.screen_updating?=?False?#?屏幕更新關(guān)閉
二、保存、退出、關(guān)閉
這里需要注意,因為 xlwings 是以程序 apps 作為初級操作對象,因此開始和最后都是基于 app 的開和關(guān)
path?=?r"C:\Scientific?Research\Python"
wb?=?app.books.open(path?+?r'\practice.xlsx')
wb.save()?#?保存文件
wb.close()?#?關(guān)閉文件
app.quit()?#?關(guān)閉程序
打開表格又分一下兩種情況,即 固定 和 活動:
xw.Book(path?+?r'\practice.xlsx')???#?固定打開表格
xw.books.open(path?+?r'\practice.xlsx')?#?頻繁打開表格
固定和頻繁打開涉及到一個概念,稱活動對象,它使 xlwings 的操作更顯靈活:
#?活動應(yīng)用程序
app?=?xw.apps.active
#?活動工作簿
wb?=?xw.books.active??#?在活動app
wb?=?app.books.active??#?在特定app
#?活動工作表
sheet?=?xw.sheets.active??#?在活動工作簿
sheet?=?wb.sheets.active??#?在特定工作簿
#?活動工作表的Range
xw.Range('A1')?
三、新建 Excel 文件
無論是新建還是打開都記得保存工作簿、關(guān)閉工作簿、關(guān)閉程序
path?=?r"C:\Scientific?Research\Python"
wb?=?app.books.add()
wb.save(path?+?r'\new_practice.xlsx')?
wb.close()?
app.quit()?
四、讀取內(nèi)容
示例文件 practice.xlsx 如下:
下面的代碼部分不再顯示程序的開閉代碼,利于直觀看到重點:
path?=?r"C:\Scientific?Research\Python"
wb?=?app.books.open(path?+?r'\practice.xlsx')
#?類似?openpyxl?中的?sheet?=?workbook.active
sheet?=?wb.sheets.active
#?獲取單個單元格的值
A1?=?sheet.range('A1').value
print(A1)
#?獲取橫向或縱向多個單元格的值,返回列表
A1_A3?=?sheet.range('A1:A3').value
print(A1_A3)
#?獲取給定范圍內(nèi)多個單元格的值,返回嵌套列表,按行為列表
A1_C4?=?sheet.range('A1:C4').value
print(A1_C4)

在 xlwings 中,可以通過 sheet.range 獲取一個或多個單元格進行操作,另外也可以不用 sheet.range 獲取:
#?獲取單個單元格的值
A1?=?sheet['A1'].value
print(A1)
#?獲取橫向或縱向多個單元格的值,返回列表
A1_A3?=?sheet['A1:A3'].value
print(A1_A3)
#?獲取給定范圍內(nèi)多個單元格的值,返回嵌套列表,按行為列表
A1_C4?=?sheet['A1:C4'].value
print(A1_C4)
無論是單個單元格還是多個單元格,可以用 .value直接獲取,輸出結(jié)果和使用 .range 完全一致,也避免了類似 openpyxl 對于多個單元格需要再建立循環(huán)遍歷才能獲取值。
還有一種類似 pandas 切片獲取范圍內(nèi)所有值的方法:
sheet?=?wb.sheets.active
A1_B2?=?sheet[:2,?:2].value
print(A1_B2)

五、寫入數(shù)據(jù)
以下為寫入 1 個單元格、一行或一列寫入多個單元格、寫入范圍內(nèi)多個單元格代碼
#?寫入?1?個單元格
sheet.range('A2').value?=?'大明'
#?一行或一列寫入多個單元格
#?橫向?qū)懭階1:C1
sheet.range('A1').value?=?[1,2,3]
#?縱向?qū)懭階1:A3
sheet.range('A1').options(transpose=True).value?=?[1,2,3]
#?寫入范圍內(nèi)多個單元格
sheet.range('A1').options(expand='table').value?=?[[1,2,3],?[4,5,6]]
例如,如果要給 practice.xlsx 添加一行新的記錄,代碼如下:
import?xlwings?as?xw
app?=?xw.App(visible=True,?add_book=False)
app.display_alerts?=?False
app.screen_updating?=?False
path?=?r"C:\Scientific?Research\Python"
wb?=?app.books.open(path?+?r'\practice.xlsx')
sheet?=?wb.sheets.active
sheet.range('A5').value?=?['小蘭',?23,?'女']
wb.save()
wb.close()
app.quit()

六、獲取數(shù)據(jù)范圍
有兩種方法實現(xiàn)
#?方法一
shape?=?sheet.used_range.shape
print(shape)
#?方法二
nrow?=?sheet.api.UsedRange.Rows.count
ncol?=?sheet.api.UsedRange.Columns.count
print(nrow)
print(ncol)
七、輸出并修改行高列寬
#?輸出
print(sheet.range('A1:A2').row_height)
print(sheet.range('A1:A2').column_width)
#?修改
sheet.range('A1:A2').row_height?=?15
sheet.range('A1:A2').column_width?=?10
八、獲取及設(shè)置公式
可以調(diào)用Excel公式,這是pandas無法完成的
#?獲取公式
print(sheet.range('B2').formula_array)
#?寫入公式
sheet.range('B2').formula='=SUM(A1,A2)'
九、 獲取、設(shè)置及清除顏色格式
當(dāng)然類似openpyxl等樣式修改也是支持的
#?獲取顏色
print(sheet.range('C1').color)
#?設(shè)置顏色
sheet.range('C1').color?=?(255,?0,?120)
#?清除顏色
sheet.range('C1').color?=?None
以上僅是針對一些常用操作給出代碼示例與講解,更多的操作可以閱讀官方文檔,大家也可以自己對比一下xlwings和其他庫在部分操作上的異同。未來我們也會更新基于xlwings的辦公自動化案例!
-END-
文末推薦一本書,《從零開始學(xué)Selenium自動化測試(基于Python·視頻教學(xué)版)》基于Python語言,系統(tǒng)地介紹了Selenium自動化測試的相關(guān)知識及應(yīng)用。書中的大部分知識點都匹配了可獨立運行的典型實例,便于讀者學(xué)習(xí)與實踐。另外,為了幫助讀者更加高效、直觀地學(xué)習(xí),本書特意提供了約10小時基礎(chǔ)操作配套教學(xué)視頻。相信讀者通過系統(tǒng)地學(xué)習(xí)本書內(nèi)容,可以全面掌握Selenium 3自動化測試技術(shù)。
