99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀超全整理|Python 操作 Excel 庫常用操作詳解
超全整理|Python 操作 Excel 庫常用操作詳解
2021-01-27
收藏

來源:早起Python

作者:陳熹、劉早起

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

大家好,我是早起。

在之前的文章中我們?cè)敿?xì)的講解了如何使用openpyxl 操作Excel,其實(shí)在Python中還有其他可以直接操作 Excel 文件的庫,

如 xlwings、xlrdxlwt 等等,本文就將講解另一個(gè)優(yōu)秀的庫xlwings

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

開頭還是想說一下,各個(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

前置知識(shí)

對(duì) xlwings 的核心理解就在于下面這張圖:

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

可以看到,和 xlwings 直接對(duì)接的是 apps,也就是 Excel 應(yīng)用程序,然后才是 工作簿 books 和工作表 sheets,這點(diǎn)和 openpyxl 有較大區(qū)別,也正是因?yàn)榇耍?span style="color:#FF6441;">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)閉

這里需要注意,因?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') 

三、新建 Excel 文件

無論是新建還是打開都記得保存工作簿、關(guān)閉工作簿、關(guān)閉程序

path = r"C:Scientific ResearchPython" wb = app.books.add()
wb.save(path + r'new_practice.xlsx') 
wb.close() 
app.quit() 

四、讀取內(nèi)容

示例文件 practice.xlsx 如下:

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

下面的代碼部分不再顯示程序的開閉代碼,利于直觀看到重點(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)
超全整理|Python 操作 Excel 庫常用操作詳解

在 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)
超全整理|Python 操作 Excel 庫常用操作詳解

五、寫入數(shù)據(jù)

以下為寫入 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()
超全整理|Python 操作 Excel 庫常用操作詳解

六、獲取數(shù)據(jù)范圍

有兩種方法實(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 

八、獲取及設(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 = (2550120) 
清除顏色 sheet.range('C1').color = None 

以上僅是針對(duì)一些常用操作給出代碼示例與講解,更多的操作可以閱讀官方文檔,大家也可以自己對(duì)比一下

xlwings和其他庫在部分操作上的異同。未來我們也會(huì)更新基于xlwings的辦公自動(dòng)化案例!  

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }