数据分析之使用python来实现报表自动化(xlwt,xlrd)

python来实现报表自动化

  • xlwt 常用功能
  • xlrd 常用功能
  • xlutils 常用功能
  • xlwt写Excel时公式的应用
  • xlwt写入特定目录(路径设置)
python写excel — xlwt常用功能

xlwt Python语言中,写入Excel文件的扩展工具。可以实现指定表单、指定单元格的写入。支持excel03版到excel2013版。

xlwt对Excel只能进行只写操作

  1. 安装

pip/pip3 install xlwt

import xlwt  # 写
  1. 基础知识
    新建工作簿&增加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了

  1. 实战
  • 先新建一个工作簿,然后往里添加两个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环境。

  1. 安装

pip/pip3 install xlrd

  1. 基础知识
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功能把文档拷贝*,然后进行编辑即可。

  1. 安装

pip/pip3 install xlutils

  1. 基础知识
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

在这里插入图片描述

发布了60 篇原创文章 · 获赞 6 · 访问量 7779

猜你喜欢

转载自blog.csdn.net/qq_44205272/article/details/103152650