超全整理|Python 操作 Excel 库 xlwings 常用操作详解!
在之前的文章中我們曾詳細的講解了如何使用openpyxl 操作Excel,其實在Python中還有其他可以直接操作 Excel 文件的庫,如 xlwings、xlrd、xlwt 等等,本文就將講解另一個優秀的庫xlwings
開頭還是想說一下,各個庫之間沒有明確的好壞之分,每個庫都有其適合的應用場景,并且xlwings 和 openpyxl 許多區別決定了它們的能力是互為補充:
“xlwings:需要安裝有 Excel 軟件,支持 .xls和 .xlsx 格式;可以調用 Excel 文件中 VBA 寫好的程序;和 matplotlib 以及 pandas 的兼容性強
openpyxl:不需要 Excel 軟件,僅支持 .xlsx 格式
”安裝
xlwings 是一個非標準庫,需要在命令行中安裝,在終端(Mac)/命令行(Win)使用pip安裝即可,一般不會出現什么問題。
pip?install?xlwings前置知識
對 xlwings 的核心理解就在于下面這張圖:
可以看到,和 xlwings 直接對接的是 apps,也就是 Excel 應用程序,然后才是 工作簿 books 和工作表 sheets,這點和 openpyxl 有較大區別,也正是因為此,xlwings 需要依然安裝有 Excel 應用程序的環境
代碼詳解
一、打開Excel程序
使用app打開
import?xlwings?as?xw app?=?xw.App(visible=True,?add_book=False)?#?程序可見,只打開不新建工作薄 app.display_alerts?=?False?#?警告關閉 app.screen_updating?=?False?#?屏幕更新關閉二、保存、退出、關閉
這里需要注意,因為 xlwings 是以程序 apps 作為初級操作對象,因此開始和最后都是基于 app 的開和關
path?=?r"C:\Scientific?Research\Python" wb?=?app.books.open(path?+?r'\practice.xlsx') wb.save()?#?保存文件 wb.close()?#?關閉文件 app.quit()?#?關閉程序打開表格又分一下兩種情況,即 固定 和 活動:
xw.Book(path?+?r'\practice.xlsx')???#?固定打開表格 xw.books.open(path?+?r'\practice.xlsx')?#?頻繁打開表格固定和頻繁打開涉及到一個概念,稱活動對象,它使 xlwings 的操作更顯靈活:
#?活動應用程序 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 文件
無論是新建還是打開都記得保存工作簿、關閉工作簿、關閉程序
path?=?r"C:\Scientific?Research\Python" wb?=?app.books.add() wb.save(path?+?r'\new_practice.xlsx')? wb.close()? app.quit()?四、讀取內容
示例文件 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) #?獲取給定范圍內多個單元格的值,返回嵌套列表,按行為列表 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) #?獲取給定范圍內多個單元格的值,返回嵌套列表,按行為列表 A1_C4?=?sheet['A1:C4'].value print(A1_C4)無論是單個單元格還是多個單元格,可以用 .value直接獲取,輸出結果和使用 .range 完全一致,也避免了類似 openpyxl 對于多個單元格需要再建立循環遍歷才能獲取值。
還有一種類似 pandas 切片獲取范圍內所有值的方法:
sheet?=?wb.sheets.active A1_B2?=?sheet[:2,?:2].value print(A1_B2)五、寫入數據
以下為寫入 1 個單元格、一行或一列寫入多個單元格、寫入范圍內多個單元格代碼
#?寫入?1?個單元格 sheet.range('A2').value?=?'大明'#?一行或一列寫入多個單元格 #?橫向寫入A1:C1 sheet.range('A1').value?=?[1,2,3] #?縱向寫入A1:A3 sheet.range('A1').options(transpose=True).value?=?[1,2,3]#?寫入范圍內多個單元格 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?=?Falsepath?=?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()六、獲取數據范圍
有兩種方法實現
#?方法一 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八、獲取及設置公式
可以調用Excel公式,這是pandas無法完成的
#?獲取公式 print(sheet.range('B2').formula_array) #?寫入公式 sheet.range('B2').formula='=SUM(A1,A2)'九、 獲取、設置及清除顏色格式
當然類似openpyxl等樣式修改也是支持的
#?獲取顏色 print(sheet.range('C1').color) #?設置顏色 sheet.range('C1').color?=?(255,?0,?120) #?清除顏色 sheet.range('C1').color?=?None以上僅是針對一些常用操作給出代碼示例與講解,更多的操作可以閱讀官方文檔,大家也可以自己對比一下xlwings和其他庫在部分操作上的異同。未來我們也會更新基于xlwings的辦公自動化案例!
-END-
點分享
點收藏
點點贊
點在看
總結
以上是生活随笔為你收集整理的超全整理|Python 操作 Excel 库 xlwings 常用操作详解!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教你如何利用EXCEL制作动态仪表盘
- 下一篇: 2021年必备 Python 插件!