Python處理Excel的方式
python對excel的操作是透過匯入相應的功能庫,然後利用庫裡的模組寫程式碼實現的。與excel有關的庫一般包括:xlrd、xlwt、xlutils、openpyxl、xlsxwriter,這五個庫用法各異,綜合來說,優先推薦opengyxl,不建議全部匯入有備無患的想法。各庫功能用法說明如下:
匯入後,執行對excel檔案開啟、讀取資料操作。比如:
import xlrd # 匯入xlrd庫
wb = xlrd.open_workbook(r"e:\test.xls")
sht = wb.sheets()[0]
aa = sht.name
bb = sht.cell_value(1, 1)
print(aa, bb)
程式碼解析:
1、匯入xlrd庫
2、開啟e:\test.xls檔案,wb代表該開啟的工作薄
3、sht代表wb工作薄裡第一個表單
4、aa代表sht表單的表單名
5、bb代表sht表單裡第2行第2列單元格的值
6、在終端輸出aa、bb,檢驗執行效果。
此時,若想修改bb單元格的值,是不可以的,因為匯入的xlrd庫只支援讀取,不支援寫入、修改。
匯入後,執行建立新表格,寫入資料操作,比如:
import xlwt
wb = xlwt.Workbook()
sht = wb.add_sheet("表1")
sht.write(0, 0, "測試資料")
wb.save(r"e:\python\建立表.xls")
1、匯入xlwt庫
2、wb代表剛建立的工作薄
3、sht代表在wb工作薄中建立表單,表單名為“表1”
4、在sht表單中的a1單元格寫入“測試資料”
5、儲存工作薄路徑及檔名為:"e:\python\建立表.xls"
匯入後,執行開啟既有excel表格資料的修改等操作,比如:
import xlrd
import xlutils as cp
aa = cp.copy.copy(wb)
sht = aa.get_sheet(0)
sht.write(1, 1, "xxx")
aa.save(r"e:\test.xls")
1、2、匯入xlrd庫和xlutils庫
3、開啟"e:\test.xls"檔案
4、aa代表複製剛才開啟的檔案
5、sht代表複製的檔案第一個表單
6、向sht表單第2行第2列寫入“XXX”
7、還是用原名儲存檔案,完成檔案內容的修改。
提示未找到xlrd庫
這是因為系統裡沒有對應的xlrd庫造成的,我們用pip方式先給系統裡安裝庫:開啟cmd命令,輸入
pip install xlrd
回車,開始安裝。稍等片刻,出現下面的介面即完成安裝:
再回到vscode介面,提示已經沒問題了。
同理,透過pip install xlwt,ipip install xlutils完成xlwt庫和xlutils庫的匯入,就可以放心使用了。
以上庫存在的不足:
1、三個庫分別有各自的功能,一般需要同時使用才能滿足實際使用,用起來比較麻煩。
2,xlwt庫和xlutils庫寫入和修改操作,都只能儲存為.xls格式,若儲存為.xlsx格式,則開啟檔案時會提示格式錯誤。
3、寫入操作後,未儲存檔案時讀取不到剛寫入的資料,讀取的還是未寫入之前的資料,只有儲存後在讀取才能得到正確結果。
用opengyxl庫操作excel,則能輕鬆解決上面三個庫的不足,且程式碼更符合excel使用習慣。
import openpyxl
wb = openpyxl.load_workbook("e:\dest.xlsx")
sht = wb["sy"]
print(sht["a2"].value)
sht["a2"].value = "新名字"
wb.save("e:\dest.xlsx")
1、匯入openpyxl庫
3、sht代表wb工作薄里名字為sy的表單
4、讀取輸出sht表單a2單元格的內容
5、給sht表單a2單元格寫入資料“新名字”
6、再次讀取輸出sht表單a2單元格的內容,會發現本次輸出的就是剛才寫入的"新名字"
7、儲存檔案,不更改檔名。
不足之處:不能操作.xls檔案。
檔案“刪除最小值.xlsx”中,(A:D)四列資料,希望刪除每行的最小值,保留三個值,寫入到後面(F:H)列中。
1、匯入openpyxl庫來處理:
2、開啟檔案,定義表單:
sht = wb["資料"]
3、資料處理(請自動忽略粗糙的邏輯思路)
for i in range(2, 8):
minnum = sht.cell(i,1).value
if sht.cell(i, 2).value < minnum:
minnum = sht.cell(i,2).value
if sht.cell(i,3).value < minnum:
minnum = sht.cell(i,3).value
if sht.cell(i, 4).value < minnum:
minnum = sht.cell(i, 4).value
k = 0
for j in range(1, 5):
if sht.cell(i, j).value > minnum:
k += 1
sht.cell(i, k+5).value = sht.cell(i, j).value
print(sht.cell(i, k+5).value, end=" ")
print()
4、儲存檔案:
執行後透過print程式碼在終端顯示了結果:
開啟表格,資料已經完成了填入:
總結:
總的來說,用openpyxl庫讓python處理excel還是比較容易的,符合python容易上手的特點,讓大家把精力多放在問題解決思路上,而不是浪費在學習程式碼寫法規則上。
Python處理Excel的方式
python對excel的操作是透過匯入相應的功能庫,然後利用庫裡的模組寫程式碼實現的。與excel有關的庫一般包括:xlrd、xlwt、xlutils、openpyxl、xlsxwriter,這五個庫用法各異,綜合來說,優先推薦opengyxl,不建議全部匯入有備無患的想法。各庫功能用法說明如下:
1、xlrd:讀取excel檔案的庫匯入後,執行對excel檔案開啟、讀取資料操作。比如:
import xlrd # 匯入xlrd庫
wb = xlrd.open_workbook(r"e:\test.xls")
sht = wb.sheets()[0]
aa = sht.name
bb = sht.cell_value(1, 1)
print(aa, bb)
程式碼解析:
1、匯入xlrd庫
2、開啟e:\test.xls檔案,wb代表該開啟的工作薄
3、sht代表wb工作薄裡第一個表單
4、aa代表sht表單的表單名
5、bb代表sht表單裡第2行第2列單元格的值
6、在終端輸出aa、bb,檢驗執行效果。
此時,若想修改bb單元格的值,是不可以的,因為匯入的xlrd庫只支援讀取,不支援寫入、修改。
2、xlwt:向excel表格寫入資料的庫匯入後,執行建立新表格,寫入資料操作,比如:
import xlwt
wb = xlwt.Workbook()
sht = wb.add_sheet("表1")
sht.write(0, 0, "測試資料")
wb.save(r"e:\python\建立表.xls")
程式碼解析:
1、匯入xlwt庫
2、wb代表剛建立的工作薄
3、sht代表在wb工作薄中建立表單,表單名為“表1”
4、在sht表單中的a1單元格寫入“測試資料”
5、儲存工作薄路徑及檔名為:"e:\python\建立表.xls"
3、xlutils:修改excel檔案的庫匯入後,執行開啟既有excel表格資料的修改等操作,比如:
import xlrd
import xlutils as cp
wb = xlrd.open_workbook(r"e:\test.xls")
aa = cp.copy.copy(wb)
sht = aa.get_sheet(0)
sht.write(1, 1, "xxx")
aa.save(r"e:\test.xls")
程式碼解析:
1、2、匯入xlrd庫和xlutils庫
3、開啟"e:\test.xls"檔案
4、aa代表複製剛才開啟的檔案
5、sht代表複製的檔案第一個表單
6、向sht表單第2行第2列寫入“XXX”
7、還是用原名儲存檔案,完成檔案內容的修改。
以上三個庫第一次使用時可能會提示報錯:提示未找到xlrd庫
這是因為系統裡沒有對應的xlrd庫造成的,我們用pip方式先給系統裡安裝庫:開啟cmd命令,輸入
pip install xlrd
回車,開始安裝。稍等片刻,出現下面的介面即完成安裝:
再回到vscode介面,提示已經沒問題了。
同理,透過pip install xlwt,ipip install xlutils完成xlwt庫和xlutils庫的匯入,就可以放心使用了。
以上庫存在的不足:
1、三個庫分別有各自的功能,一般需要同時使用才能滿足實際使用,用起來比較麻煩。
2,xlwt庫和xlutils庫寫入和修改操作,都只能儲存為.xls格式,若儲存為.xlsx格式,則開啟檔案時會提示格式錯誤。
3、寫入操作後,未儲存檔案時讀取不到剛寫入的資料,讀取的還是未寫入之前的資料,只有儲存後在讀取才能得到正確結果。
4、openpyxl庫用opengyxl庫操作excel,則能輕鬆解決上面三個庫的不足,且程式碼更符合excel使用習慣。
import openpyxl
wb = openpyxl.load_workbook("e:\dest.xlsx")
sht = wb["sy"]
print(sht["a2"].value)
sht["a2"].value = "新名字"
print(sht["a2"].value)
wb.save("e:\dest.xlsx")
程式碼解析:
1、匯入openpyxl庫
2、開啟e:\test.xls檔案,wb代表該開啟的工作薄
3、sht代表wb工作薄里名字為sy的表單
4、讀取輸出sht表單a2單元格的內容
5、給sht表單a2單元格寫入資料“新名字”
6、再次讀取輸出sht表單a2單元格的內容,會發現本次輸出的就是剛才寫入的"新名字"
7、儲存檔案,不更改檔名。
不足之處:不能操作.xls檔案。
5、xlsxwriter庫:可在excel檔案裡寫入並設定圖表的庫,有圖表要求的,後期專題學習。6、com呼叫Excel的API庫:透過COM呼叫,實現Python對excel操作的方法,寫法與VBA非常相似,個人認為還不如python的openpyxl好用,且設定過程相對複雜,以後有機會再介紹。理論結合實際,我們用一個真實案例來體驗一下python處理excel資料的感覺:檔案“刪除最小值.xlsx”中,(A:D)四列資料,希望刪除每行的最小值,保留三個值,寫入到後面(F:H)列中。
1、匯入openpyxl庫來處理:
import openpyxl
2、開啟檔案,定義表單:
sht = wb["資料"]
3、資料處理(請自動忽略粗糙的邏輯思路)
for i in range(2, 8):
minnum = sht.cell(i,1).value
if sht.cell(i, 2).value < minnum:
minnum = sht.cell(i,2).value
if sht.cell(i,3).value < minnum:
minnum = sht.cell(i,3).value
if sht.cell(i, 4).value < minnum:
minnum = sht.cell(i, 4).value
k = 0
for j in range(1, 5):
if sht.cell(i, j).value > minnum:
k += 1
sht.cell(i, k+5).value = sht.cell(i, j).value
print(sht.cell(i, k+5).value, end=" ")
print()
4、儲存檔案:
執行後透過print程式碼在終端顯示了結果:
開啟表格,資料已經完成了填入:
總結:
總的來說,用openpyxl庫讓python處理excel還是比較容易的,符合python容易上手的特點,讓大家把精力多放在問題解決思路上,而不是浪費在學習程式碼寫法規則上。