Python报表系列

编程入门 行业动态 更新时间:2024-10-19 04:30:41

Python<a href=https://www.elefans.com/category/jswz/34/1769426.html style=报表系列"/>

Python报表系列

2019年7月16日15:45:02

前言

在Python环境下生成docx格式的报表,这里以折线图、柱状图、散点图、饼状图和表格举例。这里使用python-docx第三方库来处理docx文件,但问题在于该库暂时不支持折线图等图表的插入,官网和国外论坛的处理方法暂时也是 "生成折线图的图表图片,然后利用python-docx插入该图片"。
这里选用第三方库Matplotlib来生成图表图片,详细介绍可查看该博客的Matplotlib专栏。直接上代码,不截图了,根据自己需要调整代码即可。

环境

Python 3.6
python-docx(PDF处理的第三方库,默认不支持中文)
matplotlib (用来生成图表图片)
SimHei.ttf 字体文件 (用来处理中文显示乱码问题)

准备

  • 1、pip install python-docx
  • 2、pip install matplotlib
  • 3、下载SimHei.ttf字体文件,放在所要执行的py文件同一目录下
百度网盘链接:
链接: 
提取码:caxj 下载是一个压缩文件,自行解压后字体文件为SimHei.ttf即可,原字体文件百度网盘分享失败,提示包含敏感信息,只能压缩后分享。

代码如下:

demo_docx.py (主要执行文件)

# demo_docx.py
from docx import Document
from docx.shared import Inches
from word_tool import plt_bar, plt_plot, plt_pie, plt_scatterdocument = Document()# title
document.add_heading('Document Title', 0)# paragraph
p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True  # bold
p.add_run(' and some ')
p.add_run('italic.').italic = True  # italicdocument.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='Intense Quote')document.add_paragraph('first item in unordered list', style='List Bullet'
)
document.add_paragraph('first item in ordered list', style='List Number'
)# make picturex_names = ['group_a', 'group_b', 'group_c']
y_values = [1, 10, 100]
plt_bar(x_names, y_values, "柱状图.jpg")
plt_plot(x_names, y_values, "折线图.jpg")
plt_scatter(x_names, y_values, "散点图.jpg")labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
plt_pie(labels, sizes, "饼状图.jpg")document.add_picture('柱状图.jpg', width=Inches(6.25))
document.add_picture('折线图.jpg', width=Inches(6.25))
document.add_picture('饼状图.jpg', width=Inches(6.25))
document.add_picture('散点图.jpg', width=Inches(6.25))records = ((3, '101', 'Spam'),(7, '422', 'Eggs'),(4, '631', 'Spam, spam, eggs, and spam')
)table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for qty, id, desc in records:row_cells = table.add_row().cellsrow_cells[0].text = str(qty)row_cells[1].text = idrow_cells[2].text = desc# next pages
document.add_page_break()document.save('demo.docx')

word_tool.py (所要调用文件)

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm# for chinese show
plt.rcParams['axes.unicode_minus'] = False
myfont = fm.FontProperties(fname='SimHei.ttf')"""
bar 
"""def plt_bar(names, values, picture):plt.figure(figsize=(9, 3))plt.bar(names, values)  # barplt.suptitle('柱状图', fontproperties=myfont)plt.savefig(picture)  # eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff 都可以# plt.show()"""
line
"""def plt_plot(names, values, picture):plt.figure(figsize=(9, 3))plt.plot(names, values)  # lineplt.suptitle('折线图', fontproperties=myfont)plt.savefig(picture)  # eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff 都可以# plt.show()"""
pie
"""def plt_pie(labels, sizes, picture):# Pie chart, where the slices will be ordered and plotted counter-clockwise:explode = (0, 0.1, 0, 0)  # only "explode" the 2nd slice (i.e. 'Hogs')fig1, ax1 = plt.subplots()ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',shadow=True, startangle=90)ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.plt.suptitle('饼状图', fontproperties=myfont)plt.savefig(picture)  # eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff 都可以# plt.show()"""
scatter
"""def plt_scatter(names, values, picture):plt.figure(figsize=(9, 3))plt.scatter(names, values)  # scatterplt.suptitle('散点图', fontproperties=myfont)plt.savefig(picture)  # eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff 都可以# plt.show()if __name__ == '__main__':names = ['group_a', 'group_b', 'group_c']values = [1, 10, 100]labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'sizes = [15, 30, 45, 10]plt_bar(names, values, "柱状图.jpg")plt_plot(names, values, "折线图.jpg")plt_pie(labels, sizes, "饼状图.jpg")plt_scatter(names, values, "散点图.jpg")

运行

python demo_docx.py

运行上述代码即可查看生成docx文件,打开查看。

更多推荐

Python报表系列

本文发布于:2024-03-14 08:09:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736020.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:报表   系列   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!