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



我遇到了一个问题,我想将数据(一个大型数据帧和一个图像(从我的python网络应用程序(在Tornado Webserver和Ubuntu上运行(推送到电子表格中,计算,另存为pdf并交付到前端。

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

是否有人解决了类似的问题并提出了如何解决此问题的建议?

谢谢

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

  • 使用 openpyxl 打开包含布局的现有 Excel 工作簿(模板(
  • 将数据框插入到该工作簿中的单独工作表中
  • 使用 Openpyxl 另存为temporary_file.xlsx
  • 用 --
  • 无头 --转换为 pdf temporary_file.xlsx调用 LibeOffice

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

  • 将 PDF 传送到前端或根据需要进行处理
  • 删除temporary_file.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 文件(这是 xml 的压缩文件(中,这样你就不需要 openpyxl。

相关内容

最新更新