
來源:早起Python
作者:陳熹、劉早起
大家好,我是早起。
在之前的文章中我們?cè)敿?xì)的講解了如何使用openpyxl 操作Excel,其實(shí)在Python中還有其他可以直接操作 Excel 文件的庫,
如 xlwings、xlrd、xlwt 等等,本文就將講解另一個(gè)優(yōu)秀的庫xlwings
開頭還是想說一下,各個(gè)庫之間沒有明確的好壞之分,每個(gè)庫都有其適合的應(yīng)用場(chǎng)景,
并且xlwings 和 openpyxl 許多區(qū)別決定了它們的能力是互為補(bǔ)充:
“
xlwings:需要安裝有 Excel 軟件,支持 .xls和 .xlsx 格式;可以調(diào)用 Excel 文件中 VBA 寫好的程序;
和 matplotlib 以及 pandas 的兼容性強(qiáng)
openpyxl:不需要 Excel 軟件,僅支持 .xlsx 格式
”
xlwings 是一個(gè)非標(biāo)準(zhǔn)庫,需要在命令行中安裝,在終端(Mac)/命令行(Win)使用pip安裝即可,一般不會(huì)出現(xiàn)什么問題。
pip install xlwings
對(duì) xlwings 的核心理解就在于下面這張圖:
可以看到,和 xlwings 直接對(duì)接的是 apps,也就是 Excel 應(yīng)用程序,然后才是 工作簿 books 和工作表 sheets,這點(diǎn)和 openpyxl 有較大區(qū)別,也正是因?yàn)榇耍?span style="color:#FF6441;">xlwings 需要依然安裝有 Excel 應(yīng)用程序的環(huán)境
使用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)閉
這里需要注意,因?yàn)?nbsp;xlwings 是以程序 apps 作為初級(jí)操作對(duì)象,因此開始和最后都是基于 app 的開和關(guān)
path = r"C:Scientific ResearchPython" wb = app.books.open(path + r'practice.xlsx')
wb.save() # 保存文件 wb.close() # 關(guān)閉文件 app.quit() # 關(guān)閉程序
打開表格又分一下兩種情況,即 固定 和 活動(dòng):
xw.Book(path + r'practice.xlsx') # 固定打開表格 xw.books.open(path + r'practice.xlsx') #
頻繁打開表格
固定和頻繁打開涉及到一個(gè)概念,稱活動(dòng)對(duì)象,它使 xlwings 的操作更顯靈活:
# 活動(dòng)應(yīng)用程序 app = xw.apps.active # 活動(dòng)工作簿 wb = xw.books.active
# 在活動(dòng)app wb = app.books.active # 在特定app # 活動(dòng)工作表 sheet = xw.sheets.active
# 在活動(dòng)工作簿 sheet = wb.sheets.active # 在特定工作簿 # 活動(dòng)工作表的Range xw.Range('A1')
無論是新建還是打開都記得保存工作簿、關(guān)閉工作簿、關(guān)閉程序
path = r"C:Scientific ResearchPython" wb = app.books.add()
wb.save(path + r'new_practice.xlsx')
wb.close()
app.quit()
示例文件 practice.xlsx 如下:
下面的代碼部分不再顯示程序的開閉代碼,利于直觀看到重點(diǎn):
path = r"C:Scientific ResearchPython" wb = app.books.open(path + r'practice.xlsx') #
類似 openpyxl 中的 sheet = workbook.active sheet = wb.sheets.active #
獲取單個(gè)單元格的值 A1 = sheet.range('A1').value
print(A1) # 獲取橫向或縱向多個(gè)單元格的值,返回列表 A1_A3 = sheet.range('A1:A3').value
print(A1_A3) # 獲取給定范圍內(nèi)多個(gè)單元格的值,返回嵌套列表,按行為列表 A1_C4 = sheet.range('A1:C4').value
print(A1_C4)
在 xlwings 中,可以通過 sheet.range 獲取一個(gè)或多個(gè)單元格進(jìn)行操作,另外也可以不用 sheet.range 獲?。?
# 獲取單個(gè)單元格的值 A1 = sheet['A1'].value print(A1) # 獲取橫向或縱向多個(gè)單元格的值,返回列表 A1_A3
= sheet['A1:A3'].value print(A1_A3) # 獲取給定范圍內(nèi)多個(gè)單元格的值,返回嵌套列表,按行為列表 A1_C4
= sheet['A1:C4'].value print(A1_C4)
無論是單個(gè)單元格還是多個(gè)單元格,可以用 .value直接獲取,輸出結(jié)果和使用 .range 完全一致,也避免了類似 openpyxl
對(duì)于多個(gè)單元格需要再建立循環(huán)遍歷才能獲取值。
還有一種類似 pandas 切片獲取范圍內(nèi)所有值的方法:
sheet = wb.sheets.active A1_B2 = sheet[:2, :2].value print(A1_B2)
以下為寫入 1 個(gè)單元格、一行或一列寫入多個(gè)單元格、寫入范圍內(nèi)多個(gè)單元格代碼
# 寫入 1 個(gè)單元格 sheet.range('A2').value = '大明' # 一行或一列寫入多個(gè)單元格 #
橫向?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)多個(gè)單元格 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 ResearchPython" wb
= app.books.open(path + r'practice.xlsx')
sheet = wb.sheets.active
sheet.range('A5').value = ['小蘭', 23, '女']
wb.save()
wb.close()
app.quit()
有兩種方法實(shí)現(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
可以調(diào)用Excel公式,這是pandas無法完成的
# 獲取公式 print(sheet.range('B2').formula_array) # 寫入公式 sheet.range('B2').formula='=SUM(A1,A2)'
當(dāng)然類似openpyxl等樣式修改也是支持的
# 獲取顏色 print(sheet.range('C1').color) # 設(shè)置顏色 sheet.range('C1').color = (255, 0, 120) #
清除顏色 sheet.range('C1').color = None
以上僅是針對(duì)一些常用操作給出代碼示例與講解,更多的操作可以閱讀官方文檔,大家也可以自己對(duì)比一下
xlwings和其他庫在部分操作上的異同。未來我們也會(huì)更新基于xlwings的辦公自動(dòng)化案例!
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03