Excel 文件处理
xlrd xlwt xlutils openpyxl pandas pip 安装
xlrd 读取 xlwt 写入 xlutils 操作(复制)
Excel 工作簿 工作表 单元格 模块三大组件
xlrd.biffh.XLRDError: Excel xlsx file; not supported
xlrd 2.0.0以后的版本不支持xlsx格式的excel文件
查看xlrd 可安装版本
pip index versions xlrd
报错
pip index versions xlrd --trusted-host mirrors.aliyun.com
pip install xlrd==1.2.0
xlrd 读取数据
import xlrd
wb=xlrd.open_workbook(r"文件地址")
# 打印工作簿名称
print(f"工作簿名称:{wb.sheet_names()}")
sheet=wb.sheet_by_name("Sheet1")
print(f"工作簿名称:{sheet.name},行数:{sheet.nrows},列数:{sheet.ncols}")
# 循环打印行数据
for sh in wb.sheets():
for r in range(1,sh.nrows):
print(sh.row(r))
xlwr 写入数据
import xlrd
import xlwt
file_path=r"源文件地址"
wb=xlrd.open_workbook(file_path)
sheet_name="Sheet1"
sheet=wb.sheet_by_name(sheet_name)
max_row=sheet.nrows
wb2=xlwt.Workbook()
max_sheet=len(wb.sheets())
sheet2=wb2.add_sheet(f"Sheet1",cell_overwrite_ok=True)
for sh in wb.sheets():
for r in range(sh.nrows):
for c in range(len(sh.row(r))):
sheet2.write(r, c,sh.row(r)[c].value)
file_path=r"新文件"
wb2.save(file_path)
报错:python Exception: Attempt to overwrite cell: sheetname=‘xxx’ rowx=0 colx=0
解决方案:add_sheet(f"Sheet1",cell_overwrite_ok=True)
xlutils 编辑数据
import xlrd
from xlutils.copy import copy
file_path=r"文件地址"
wb=xlrd.open_workbook(file_path)
sheet=wb.sheet_by_name("Sheet1")
max_row=sheet.nrows
wb=copy(wb)
sheet=wb.get_sheet(0)
# 添加
sheet.write(max_row,0,f"test{max_row}")
sheet.write(max_row,1,max_row)
# 修改
sheet.write(2,0,f"test{max_row}")
sheet.write(2,1,max_row)
wb.save(file_path)
openpyxl
import openpyxl
file_path = r"文件地址"
def create_excel():
wb=openpyxl.Workbook()
# sheet=wb.create_sheet("sheet1",0)
sheet=wb.active
# 重命名sheet
sheet.title="sheet1"
sheet.cell(1,1,"Name")
sheet.cell(1, 2, "Age")
for d in range(10):
r=sheet.max_row+1
sheet.cell(r,1,f"test{d}")
sheet.cell(r, 2,18+d)
wb.save(file_path)
def read_excel():
wb=openpyxl.load_workbook(file_path)
# sheet=wb["sheet1"]
sheet=wb.get_sheet_by_name("sheet1")
print(sheet.max_row)
print(sheet.max_column)
list=[]
for r in range(1,sheet.max_row+1):
data={}
for c in range(1,sheet.max_column+1):
data[sheet.cell(1,c).value]=sheet.cell(r,c).value
list.append(data)
print(list)
def update_excel():
wb = openpyxl.load_workbook(file_path)
sheet=wb["sheet1"]
flag=False
for r in range(1, sheet.max_row + 1):
for c in range(1, sheet.max_column + 1):
if(sheet.cell(r, c).value=="test2"):
sheet.cell(r, c).value=f'{sheet.cell(r, c).value}_felicia'
flag=True
break
if(flag):
break
wb.save(file_path)
# def edit_excel():
# openpyxl.
create_excel()
update_excel()
read_excel()
警告:DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
解决方案 wb.get_sheet_by_name(“sheet1”) 改为 wb[“sheet1”]