我目前正在使用MS Access生成报告,但我需要做的一些计算有限。
我正在考虑使用Python来运行报告,即每行数据一个报告,它接受列字段并将它们放在文本框中,如下所示:
Python如何实现这一目标?
答案 0 :(得分:10)
这远远超出了Pandas,但您可以借助jinja2
(模板引擎)和xhtml2pdf
(将HTML转换为PDF)轻松地从Pandas DataFrame的每一行创建PDF报告库。
首先,在report_template.html
中定义报告的结构和外观:
<html>
<head>
<style type="text/css">
html, body {
width: 500px;
font-size: 12px;
background: #fff;
padding: 0px;
}
#my-custom-table {
width: 500px;
border: 0;
margin-top: 20px;
}
#my-custom-table td {
padding: 5px 0px 1px 5px;
text-align: left;
}
</style>
</head>
<body>
<table cellspacing="0" border="0" style="width:500px; border:0; font-size: 14px;">
<tr>
<td style="text-align:left;">
<b><span>Title of the PDF report - Row {{ row_ix + 1 }}</span></b>
</td>
<td style="text-align:right;">
<b><span>{{ date }}</span></b>
</td>
</tr>
</table>
<table cellspacing="0" border="0" id="my-custom-table">
{% for variable_name, variable_value in df.iteritems() %}
{% if loop.index0 == 0 %}
<tr style="border-top: 1px solid black;
border-bottom: 1px solid black;
font-weight: bold;">
<td>Variable name</td>
<td>Variable value</td>
</tr>
{% else %}
<tr>
<td>{{ variable_name }}</td>
<td>{{ variable_value }}</td>
</tr>
{% endif %}
{% endfor %}
</table>
</body>
</html>
然后,运行此Python 3代码,通过jinja2
将每行DataFrame转换为HTML字符串,然后通过xhtml2pdf
将HTML转换为PDF:
from datetime import date
import jinja2
import pandas as pd
from xhtml2pdf import pisa
df = pd.DataFrame({
"Average Introducer Score": [9, 9.1, 9.2],
"Reviewer Scores": ["Academic: 6, 6, 6", "Something", "Content"],
"Average Academic Score": [5.7, 5.8, 5.9],
"Average User Score": [1.2, 1.3, 1.4],
"Applied for (RC)": [9.2, 9.3, 9.4],
"Applied for (FEC)": [5.5, 5.6, 5.7],
"Duration (Months)": [36, 37, 38]})
for row_ix, row in df.iterrows():
html = jinja2.Environment( # Pandas DataFrame to HTML
loader=jinja2.FileSystemLoader(searchpath='')).get_template(
'report_template.html').render(date=date.today().strftime('%d, %b %Y'),
row_ix=row_ix, df=row)
# Convert HTML to PDF
with open('report_row_%s.pdf' % (row_ix+1), "w+b") as out_pdf_file_handle:
pisa.CreatePDF(
src=html, # HTML to convert
dest=out_pdf_file_handle) # File handle to receive result
对于Python代码中指定的DataFrame,将输出3个PDF。第一个PDF看起来像这样(转换为PNG以便能够在此处显示):
答案 1 :(得分:1)
这肯定是可能的,但我不认为大熊猫提供这样的功能。你可能想看一下你'编程'的乳胶和编译文件(它本身与python无关)。您可以创建一个乳胶模板,并在python中使用内容动态填充它,然后编译一个pdf文档,但它可能需要一些努力才能找到进入乳胶的方法。
答案 2 :(得分:1)
使用Pandas读取CSV文件:是的,绝对可以。请参阅:http://pandas.pydata.org/pandas-docs/stable/io.html#io-read-csv-table
使用Pandas生成报告:取决于您正在寻找什么。 Pandas有许多不同的输出编写功能,但他们的重点是生成表,而不是生成整个文档。您可以直接从Pandas获得的最接近&#39;文档的输出可能是HTML表格输出: http://pandas.pydata.org/pandas-docs/stable/io.html#io-html