目录
温馨提示:此方法写入的excel,单元格中无法保留公式。若想保留公式,可使用openpyxl,读取excel时则不能使用data_only=True
处理 .xls 文件的基本流程是:xlrd读取——xlutils复制——xlwt写入——.save()保存
import xlrd
wb = xlrd.open_workbook('文件路径')
# 此处的文件路径可以是绝对路径,也可以是相对路径;
# 找不到文件会报错
这部分记录 sheet 属性获取的方式,包括对象、工作表名、获取指定工作表、以及判断是否加载。属性的作用多用于 sheet 之间的关系循环。
objects = wb.sheets()
# 获取文件内所有 sheet 的对象
names = wb.sheet_names()
# 获取文件内所有 sheet 的名称,返回名称列表
ws = wb.sheet_by_index(索引值)
ws = wb.sheet_by_name(文件名)
# 获取对应索引值的 sheet 对象
# 获取对应文件名的 sheet 对象
name = ws.name
# 获取指定工作表的表名
n = wb.nsheets
# 获取一个工作簿中有几个
i = wb.sheet_loaded(文件名)
i = wb.sheet_loaded(索引值)
# 检查文件中对应的文件是否导入,返回值是布尔类型
这部分主要是对应 sheet 内部的进行操作,从行、列、单元格的角度进行操作。主要用于当前操作工作表内的值进行操作。
nrows = ws.nrows
ncols = ws.ncols
# 获取工作表已经使用的行数
# 获取工作表已经使用的行数
lst = ws.row(索引值)
lst = ws.col(索引值)
# 获取工作表对应行的单元格组成的列表
# 获取工作表对应列的单元格组成的列表
# 元素格式是: 数值类型:对应数据
lst = ws.row_values(索引值,start_colx=0, end_colx=None)
lst = ws.col_values(索引值,start_rowx=0, end_rowx=None)
# 获取工作表对应行的值组成的列表
# 获取工作表对应行的值组成的列表
lst = ws.row_slice(索引值, start_colx=0, end_colx=None)
lst = ws.col_slice(索引值, start_rowx=0, end_rowx=None)
# 根据索引值,对该行进行切片,后可选开始列与结束列
# 根据索引值,对该列进行切片,后可选开始行与结束行
lst = ws.row_types(索引值,start_colx=0, end_colx=None)
lst = ws.col_types(索引值, start_rowx=0, end_rowx=None)
# 根据索引值,输出行数据类型
# 根据索引值,输出列数据类型
i = ws.row_len(索引值)
# 根据索引值,返回该行的长度
# 列没有对应的操作
n = ws.cell(行索引, 列索引)
# 根据行列索引,返回单元格数据:数据类型:对应数据
n = ws.cell_value(行索引, 列索引)
n = ws.cell(行索引,列索引).value
n = ws.row(行索引)[列索引].value
# 根据行列索引,返回单元格数据:对应数据
n = ws.cell_type(行索引, 列索引)
n = ws.cell(行索引,列索引).ctype
n = ws.row(行索引)[列索引].ctype
# 根据行列索引,返回单元格数据:数据类型
# 数据类型:0.空,1.字符串,2.数字,3.日期,4.布尔,5.error
xlrd.cellname(行索引,列索引)
# A1表达法
xlrd.cellnameabs(行索引,列索引)
# R1C1表达法
xlrd.colname(列索引)
# 将数字转换为字母表达
import xlwt
xlwt 的处理流程很简单:新建工作簿——新建工作表——写入数据——保存
nwb = xlwt.Workbook('utf-8')
# 通过 .Workbook 方法新建工作簿
nws = nwb.add_sheet('名称', cell_overwrite_ok=True)
# 通过 .add_sheet() 方法在 工作簿nwb 中添加一个工作表
# 如果不添加会报错
nws.write(行索引,列索引,写入内容)
# 通过 .write 的方式写入想要写入的内容
nwb.save('文件名.xls')
# 通过 .save 的方式保存新建的工作簿
# 注意要带上 .xls 的文件后缀
from xlutils.copy import copy
wb = xlrd.open_workbook('文件名')
# 通过 xlrd 读取需要处理的工作簿
nwb = copy(wb)
# 通过 copy 的方法复制一份需要处理的工作簿,这样 xlwt 就能处理了
实现excel自动化,一般是先编写好一份模板的excel文件。后基于这份模板excel文件填上相应数据后保存生存新的一份excel文件
async def write_excel_data(data, save_path="/Users/Desktop/变更操作单"):
# data: 二维数组,表示插入excel的数据
# save_path: 工作簿的路径
# formatting_info=True:保留Excel的原格式
workbook = xlrd.open_workbook('/Users/Desktop/变更操作单/变更操作单模板.xls', formatting_info=True)
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
print(workbook.sheets())
# 写入表格信息
# 第一次建立工作簿时候调用
write_sheet = new_workbook.get_sheet(0)
index = len(data) # 获取需要写入数据的行数
# workbook = xlwt.Workbook() # 新建一个工作簿
for i in range(0, index):
for j in range(0, len(data[i])):
write_sheet.write(i, j, data[i][j]) # 向表格中写入数据(对应的行和列)
# now_date_str = time.strftime("%Y%m%d", time.localtime())
now_date_str = '20230129'
save_path = os.path.join(save_path, "{}变更操作单.xls".format(now_date_str))
new_workbook.save(save_path) # 保存工作簿
更多操作excel的模板库可参考:全网最全Python操作Excel教程