从 Python 网络应用程序:将数据插入电子表格(例如 LibreOffice / Excel),计算并保存为 pdf

Posted

技术标签:

【中文标题】从 Python 网络应用程序:将数据插入电子表格(例如 LibreOffice / Excel),计算并保存为 pdf【英文标题】:From Python web app: insert data into spreadsheet (e.g. LibreOffice / Excel), calculate and save as pdf 【发布时间】:2018-10-22 11:17:23 【问题描述】:

我面临的问题是,我想将我的 python Web 应用程序(在 Tornado Webserver 和 Ubuntu 上运行)中的数据(一个大数据框和一个图像)推送到电子表格中,计算,另存为 pdf 并传递到前端。

我查看了几个库,例如 openpyxl,用于在 MS Excel 中编写表格,但这只能解决一部分问题。我正在考虑使用 LibreOffice 和 pyoo,但似乎我的后端需要与导入 pyuno 时随 LibeOffice 一起提供的相同 python 版本。

有人解决了类似的问题并有解决方法的建议吗?

谢谢

【问题讨论】:

【参考方案1】:

我想出了一个可以说不漂亮,但对我来说非常灵活的罕见解决方案。

使用 openpyxl 打开包含布局(模板)的现有 Excel 工作簿 将数据框插入该工作簿的单独工作表中 使用openpyxl保存为temporary_file.xlsx 使用 --headless --convert-to pdftemporary_file.xlsx 调用 LibeOffice

在执行最后一次调用时,所有集成公式都会重新计算/更新并创建 pdf(您必须配置 calc 以便在打开文件时启用自动计算)

根据需要将 pdf 交付到前端或处理 删除临时文件.xlsx
import openpyxl
import pandas as pd
from subprocess import call

d   = 'col1': [1, 2], 'col2': [3, 4]
df  = pd.DataFrame(data=d)
now = datetime.datetime.now().strftime("%Y%m%d_%H%M_%f")

wb_template_name = 'Template.xlsx'
wb_temp_name     = now + wb_template_name
wb               = openpyxl.load_workbook(wb_template_name)
ws               = wb['dataframe_sheet']
pdf_convert_cmd  = 'soffice --headless --convert-to pdf ' + wb_temp_name

for r in dataframe_to_rows(df, index=True, header=True):
   ws.append(r)
wb.save(wb_temp_name)
call(pdf_convert_cmd, shell=True)

我这样做的原因是我希望能够独立于数据设置 pdf 的布局样式。我使用在 excel 中引用单独数据框表的命名范围或查找。

我还没有尝试插入图像,但这应该类似。我认为有一种方法可以提高性能,同时只需将数据帧转储到 xlsx 文件(这是 xmls 的压缩文件)中,这样您就不需要 openpyxl。

【讨论】:

以上是关于从 Python 网络应用程序:将数据插入电子表格(例如 LibreOffice / Excel),计算并保存为 pdf的主要内容,如果未能解决你的问题,请参考以下文章

将字体从电子表格导出到 python

当我在电子表格中插入图像然后将其转换为pdf时,我的应用程序脚本存在问题。该图像未出现在文档pdf中

如何插入嵌入的图片?

以编程方式从 Excel 电子表格中提取数据

如何从命令行 Python 脚本将所有工作表保存在 LibreOffice Calc 电子表格中

从电子表格以 Python 方式创建邻接矩阵