Bootstrap

python 处理 Excel

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”]

;