从 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 交付到前端或处理 删除临时文件.xlsximport 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的主要内容,如果未能解决你的问题,请参考以下文章
当我在电子表格中插入图像然后将其转换为pdf时,我的应用程序脚本存在问题。该图像未出现在文档pdf中