python讀寫修改Excel之xlrd&xlwt&xlutils
py讀寫修改常用的三種方法
- xlwt:用于寫入 Excel 文件
- xlrd:用于讀取 Excel 文件
- xlutils:用于操作 Excel 文件的實用工具,比如復(fù)制、分割、篩選等
0、安裝模塊
pip3 install xlrd xlwt xlutils
1. 寫入excel
git:https://github.com/python-excel/xlwt/tree/master/examples
實現(xiàn)效果

上代碼
from datetime import datetime
import xlwt
font0 = xlwt.Font()
# font0.name = 'Times New Roman' # 適用于字母或數(shù)字
font0.name = '宋體' # 適用于中文,適配字體或者不指定字體才能體現(xiàn)出指定的顏色
# font0.colour_index = 1 # 白色
# font0.colour_index = 2 # 紅色
# font0.colour_index = 3 # 綠色
# font0.colour_index = 4 # 藍(lán)色
# font0.colour_index = 5 # 黃色
# font0.colour_index = 6 # 紫色
# font0.colour_index = 7 # 青色
# font0.colour_index = 8 # 黑色,比默認(rèn)加黑,不加粗
font0.colour_index = 4 # 藍(lán)色
font0.bold = True
style0 = xlwt.XFStyle()
style0.font = font0
# 創(chuàng)建樣式對象:日期格式
style1 = xlwt.XFStyle()
style1.num_format_str = 'YYYY-MM-DD'
# 創(chuàng)建樣式對象:字體居中對齊
style2 = xlwt.XFStyle()
al = xlwt.Alignment()
al.horz = 0x02 # 設(shè)置水平居中
al.vert = 0x01 # 設(shè)置垂直居中
style2.alignment = al
# 創(chuàng)建樣式對象,設(shè)置日期格式與字體居中對齊
style3 = xlwt.XFStyle()
style3.num_format_str = 'YYYY-MM-DD'
style3.alignment = al
# 創(chuàng)建樣式對象,設(shè)置字體居中 且 設(shè)置字體顏色
style4 = xlwt.XFStyle()
style4.alignment = al
style4.font = font0
now_time = datetime.now().strftime('%Y-%m-%d %X')
date_time = datetime.now().strftime('%Y-%m-%d')
# 創(chuàng)建表格
wb = xlwt.Workbook()
# 新建一個名為 Score Sheet 的表單頁
score_sheet = wb.add_sheet('Score Sheet')
# 新建一個名為 Record Test Sheet 的表單頁
record_test_sheet = wb.add_sheet('Record Test Sheet')
# 1、寫入 Score Sheet 表單
# 設(shè)置 表頭, 第一個參數(shù)是行,第二個參數(shù)是列
score_sheet.write(0, 0, '時間', style2)
score_sheet.write(0, 1, '班級', style2)
score_sheet.write(0, 2, '姓名', style2)
score_sheet.write(0, 3, '語文', style2)
score_sheet.write(0, 4, '數(shù)學(xué)', style2)
score_sheet.write(0, 5, '英語', style2)
score_sheet.write(0, 6, '理綜', style2)
score_sheet.write(0, 7, '總分', style4)
# 按照位置添加數(shù)據(jù)
score_sheet.write(1, 0, datetime.now(), style3)
score_sheet.write(1, 1, '高三三班', style2)
score_sheet.write(1, 2, '桑巖', style2)
score_sheet.write(1, 3, 132, style2)
score_sheet.write(1, 4, 150, style2)
score_sheet.write(1, 5, 140, style2)
score_sheet.write(1, 6, 290, style2)
score_sheet.write(1, 7, xlwt.Formula("D2+E2+F2+G2"), style2)
score_sheet.write(2, 0, datetime.now(), style3)
score_sheet.write(2, 1, '高三三班', style2)
score_sheet.write(2, 2, '項天騏', style2)
score_sheet.write(2, 3, 140, style2)
score_sheet.write(2, 4, 150, style2)
score_sheet.write(2, 5, 132, style2)
score_sheet.write(2, 6, 280, style2)
score_sheet.write(2, 7, xlwt.Formula("D3+E3+F3+G3"), style2)
score_sheet.write(3, 0, datetime.now(), style3)
score_sheet.write(3, 1, '高三三班', style2)
score_sheet.write(3, 2, '向淮南', style2)
score_sheet.write(3, 3, 135, style2)
score_sheet.write(3, 4, 150, style2)
score_sheet.write(3, 5, 145, style2)
score_sheet.write(3, 6, 270, style2)
score_sheet.write(3, 7, xlwt.Formula("D4+E4+F4+G4"), style2)
# 2、寫入 Record Test Sheet 表單
record_test_sheet.write(0, 0, '時間')
record_test_sheet.write(0, 1, '學(xué)科', style1)
record_test_sheet.write(0, 2, '成績', style1)
record_test_sheet.write(1, 0, datetime.now(), style1)
record_test_sheet.write(1, 1, '語文', style2)
record_test_sheet.write(1, 2, 80)
record_test_sheet.write(2, 0, datetime.now(), style3)
record_test_sheet.write(2, 1, '數(shù)學(xué)', style2)
record_test_sheet.write(2, 2, 99)
record_test_sheet.write(3, 0, now_time, style2)
record_test_sheet.write(3, 1, '英語', style2)
record_test_sheet.write(3, 2, 98)
# 保存表格,這里應(yīng)該是覆蓋寫,注意每次都是覆蓋所有表單內(nèi)容,建議每次生成的表單加上時間版本區(qū)分
# wb.save('example.xls')
wb.save('example-{0}.xls'.format(date_time))
2、讀 Excel
git:https://github.com/python-excel/xlrd
實現(xiàn)效果,讀取sheet 表單內(nèi)容

| 數(shù)值 | 類型 | 說明 |
|---|---|---|
| 0 | empty | 空 |
| 1 | string | 字符串 |
| 2 | number | 數(shù)字 |
| 3 | date | 日期 |
| 4 | boole | 布爾值 |
| 5 | error | 錯誤 |
代碼
import xlrd
# 打開 xls文件
wb = xlrd.open_workbook("example-2021-03-09.xls")
# 獲取并打印 sheet 數(shù)量
print("sheet 數(shù)量:", wb.nsheets) # sheet 數(shù)量: 2
# 獲取并打印 sheet 名稱
print("sheet 名稱:", wb.sheet_names()) # sheet 名稱: ['Score Sheet', 'Record Test Sheet']
# 根據(jù) sheet 索引獲取內(nèi)容
sh1 = wb.sheet_by_index(0)
# 或者
# 也可根據(jù) sheet 名稱獲取內(nèi)容
# sh = wb.sheet_by_name('Score Sheet')
# 獲取并打印該 sheet 行數(shù)和列數(shù)
print(u"sheet: %s表單 共 %d 行 %d 列" % (sh1.name, sh1.nrows, sh1.ncols)) # sheet: Score Sheet表單 共 4 行 8 列
# 獲取并打印某個單元格的值
print("第一行第二列的值為:", sh1.cell_value(0, 1)) # 第一行第二列的值為: 班級
# 獲取整行或整列的值
row_info = sh1.row_values(0) # 獲取第一行內(nèi)容
col_info = sh1.col_values(1) # 獲取第二列內(nèi)容
# 打印獲取的行列值
print("第一行的值為:", row_info) # 第一行的值為: ['時間', '班級', '姓名', '語文', '數(shù)學(xué)', '英語', '理綜', '總分']
print("第二列的值為:", col_info) # 第二列的值為: ['班級', '高三三班', '高三三班', '高三三班']
# 獲取單元格內(nèi)容的數(shù)據(jù)類型,注意這里的值 另有含義
print("第二行第一列的【值類型】為:", sh1.cell(1, 0).ctype) # 第二行第一列的【值類型】為: 3
# 遍歷所有表單內(nèi)容
for sh in wb.sheets():
for r in range(sh.nrows):
# 輸出指定行內(nèi)容,這里包含原有類型指定,不能直接獲取到指定列的值
row_val_list = sh.row(r)
print(row_val_list)
# [text:'時間', text:'班級', text:'姓名', text:'語文', text:'數(shù)學(xué)', text:'英語', text:'理綜', text:'總分']
# 遍歷行內(nèi),輸出當(dāng)前行內(nèi)的所有列值
col_val_list = [col_val.value for col_val in row_val_list]
print(col_val_list)
3、修改 Excel
修改 Excel 是通過 xlutils 庫的 copy 方法將原來的 Excel 整個復(fù)制一份,然后再做修改操作,最后再保存
修改前

修改后

上代碼
import xlrd
from xlutils.copy import copy
# 打開 excel 文件, 帶格式復(fù)制
read_book = xlrd.open_workbook("example-2021-03-09.xls", formatting_info=True)
# 復(fù)制一份
wb = copy(read_book)
# 選取第一個表單
sh1 = wb.get_sheet(0)
# 在第五行新增寫入數(shù)據(jù)
sh1.write(4, 0, '2020-12-16')
sh1.write(4, 1, '高三三班')
sh1.write(4, 2, '小魚仙倌兒')
sh1.write(4, 3, 150)
sh1.write(4, 4, 150)
sh1.write(4, 5, 150)
sh1.write(4, 6, 300)
# 選取第二個表單
sh2 = wb.get_sheet(1)
# 替換總成績數(shù)據(jù)
sh2.write(1, 2, 100)
# 保存
wb.save('example-2021-03-09.xls')
注意,復(fù)制 xls這里有格式問題
似乎沒有任何簡單的方法可以保留單元格的格式;它總是被吹走并設(shè)置為空白。
https://www.coder.work/article/80896
https://zhuanlan.zhihu.com/p/128674458
附錄
參考:http://www.ityouknow.com/python/2019/12/29/python-excel-103.html
官網(wǎng):http://www.python-excel.org/
到此這篇關(guān)于python讀寫修改Excel之xlrd&xlwt&xlutils的文章就介紹到這了,更多相關(guān)python讀寫修改Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中列表(list)和元組(tuple)的深入講解
這篇文章主要給大家介紹了關(guān)于python中列表(list)和元組(tuple)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Python環(huán)境下安裝使用異步任務(wù)隊列包Celery的基礎(chǔ)教程
這篇文章主要介紹了Python環(huán)境下安裝使用異步任務(wù)隊列包Celery的基礎(chǔ)教程,Celery的分布式任務(wù)管理適合用于服務(wù)器集群的管理和維護(hù),需要的朋友可以參考下2016-05-05
Python構(gòu)建XML樹結(jié)構(gòu)的方法示例
這篇文章主要介紹了Python構(gòu)建XML樹結(jié)構(gòu)的方法,結(jié)合實例形式分析了Python創(chuàng)建與打印xml數(shù)結(jié)構(gòu)的實現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-06-06

