python来实现报表自动化
- xlwt 常用功能
- xlrd 常用功能
- xlutils 常用功能
- xlwt写Excel时公式的应用
- xlwt写入特定目录(路径设置)
python写excel — xlwt常用功能
xlwt Python语言中,写入Excel文件的扩展工具。可以实现指定表单、指定单元格的写入。支持excel03版到excel2013版。
xlwt对Excel只能进行只写操作
- 安装
pip/pip3 install xlwt
import xlwt # 写
- 基础知识
新建工作簿&增加sheet: 新建一个工作簿,然后往里添加sheet
f = xlwt.Workbook() # 创建工作簿
sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)
# 一个excel表格中可以添加多个sheet
往sheet中写入内容: sheet.write函数可以传三个参数
第i(参数1)第j(参数2)列存入内容(参数3)
# sheet1.write(i, j, '第i行第j列存放此内容', style)
# 这条语句实现的功能就是往第i行第j列存第三个参数的内容,
# 第四个参数是样式(如字体,背景),可以不传第四个参数。
合并单元格并写入内容:
sheet1.write_merge(x, x + m, y, y + n, '内容', style)
# 这条y语句表示将[x:x+m]行[y:y+n]列的矩阵合并成一个单元格。存放第五个参数的
#内容,同理,style参数可以不传参
最后使用f.save(‘demo’)
就可以把f保存到excel了
- 实战
- 先新建一个工作簿,然后往里添加两个sheet,然后查看效果
- 往sheet中写入内容,不传入style参数
f = xlwt.Workbook() # 创建工作簿
# 加cell_overwrite_ok=True 解决允许对同一个单元格重复操作
sheet1 = f.add_sheet("新手1", cell_overwrite_ok=True)
sheet2 = f.add_sheet("新手2", cell_overwrite_ok=True)
row = 0
temp = ["姓名", "年龄", "学校", "专业", "爱好"]
for i, j in enumerate(temp):
sheet1.write(row, i, j)
row += 1
sheet1.write(row, 0, "xu")
sheet1.write(row, 1, 20)
sheet1.write(row, 2, "清华大学")
sheet1.write(row, 3, "")
row += 1
sheet1.write(row, 0, "ji")
sheet1.write(row, 1, 19)
sheet1.write(row, 2, "北京大学")
sheet1.write(row, 3, "")
f.save("新手.xls")
使用write_merge函数来合并单元格并写入
# 把单元格第二行到第四行(1-2),第五列合并(3-3)
sheet1.write_merge(1, 2, 4, 4, "篮球")
pythonxd读excel —xlrd常用功能
xlrd Python语言中,读取Excel的扩展工具。可以实现指定表单、指定单元格的读取。使用时请确保已经安装python环境。
- 安装
pip/pip3 install xlrd
- 基础知识
import xlrd
f = xlrd.open_workbook("新手.xls")
# 打印出名字
print(f.sheet_names())
sheet1 = f.sheet_by_index(0) # 打开第一个sheet
sheet2 = f.sheet_by_name('新手2') # 打开名字为新手2的sheet
# 输出sheet的名称,行数,列数
print(sheet1.name, sheet1.nrows, sheet1.ncols)
print(sheet2.name, sheet2.nrows, sheet2.ncols)
print(sheet1.row_values(1)) # 获取第二行内容
print(sheet1.col_values(2)) # 获取第三列内容
# 获取单元格内容
print(sheet1.cell(1, 0).value)
# 获取单元格内容的数据类型
print(sheet1.cell(1, 1).ctype)
'''
['新手1', '新手2']
新手1 3 5
新手2 0 0
['xu', 20.0, '清华大学', '赚钱', '篮球']
['学校', '清华大学', '北京大学']
xu
2
'''
xlutils 常用功能
我们可能会遇到一个问题,想对一个存储好的Excel进行编辑***。
但是xlrd是只读模式,不能进行编写。
而xlwt是只写模式,不能读入Excel文件进行编辑。
我们可以采用xlrd打开一个文档,后采用xlutils中copy功能把文档拷贝*,然后进行编辑即可。
- 安装
pip/pip3 install xlutils
- 基础知识
import xlrd
from xlutils.copy import copy
f = xlrd.open_workbook("新手.xls")
wb = copy(f) # 将f拷贝到wb
sheet1 = wb.get_sheet(0) # 打开sheet
print(sheet1.name)
sheet1.write(3, 0, "拷贝来的")
wb.save("新手.xls")
# 新手1
PS: 可以看到第二行第五列和第三行第五列合并格已经在COPY的时候被毁掉了。
xlwt写Excel时公式的应用
import xlwt
f = xlwt.Workbook() # 创建工作簿
sheet1 = f.add_sheet('得分统计', cell_overwrite_ok=True)
my_dict = {"monkey": {"writing": 80, "reading": 60, "speaking": 70, "listening": 60},
"grape": {"writing": 100, "reading": 80, "speaking": 70, "listening": 60}}
sheet1.write(0, 0, u'得分统计')
sheet1.write(1, 0, u'书法得分')
sheet1.write(2, 0, u'阅读得分')
sheet1.write(3, 0, u'演讲得分')
sheet1.write(4, 0, u'听力得分')
temp = ['writing', 'reading', 'speaking', 'listening']
for pos, name in enumerate(my_dict):
sheet1.write(0, pos+1, name)
for p, v in enumerate(temp):
sheet1.write(p+1, pos+1, my_dict[name][v])
f.save('得分统计.xls')
现在想做的是统计grape的总分和monkey的总分,在f.save之前加入代码:
sheet1.write(5, 0, '总分统计')
for i in range(len(my_dict)):
for_str = chr(65+i+1)+'2+'+chr(65+i+1)+'3+'+chr(65+i+1)+'4+'+chr(65+i+1)+'5'
print(for_str)
sheet1.write(5, i+1, xlwt.Formula(for_str))
f.save('得分统计.xls')
# B2+B3+B4+B5
# C2+C3+C4+C5