从python webapp:将数据插入电子表格(例如LibreOffice/Excel),计算并另存为pd

2024-06-08 19:45:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我面临的问题是,我想把数据(一个大的数据帧和一个图像)从我的python网络应用程序(运行在Tornado Webserver和Ubuntu上)推到一个电子表格中,计算,保存为pdf,并将其传递到前端。你知道吗

我查看了几个lib,比如openpyxl,它们可以在msexcel中编写工作表,但这只能解决一部分问题。我在考虑使用LibreOffice和pyoo,但似乎我的后端需要与导入pyuno时LibeOffice附带的相同的python版本。你知道吗

是否有人已经解决了类似的问题,并有如何解决这个问题的建议?你知道吗

谢谢


Tags: 数据图像程序libreofficepdfubuntulib网络应用
1条回答
网友
1楼 · 发布于 2024-06-08 19:45:25

我想出了一个让我们说不漂亮,但罕见的解决方案,工作非常灵活,为我。你知道吗

  • 使用openpyxl打开包含布局(模板)的现有Excel工作簿
  • 将数据框插入该工作簿中的单独工作表中
  • 使用openpyxl保存为临时文件_文件.xlsx你知道吗
  • 使用headless convert to pdf temporary调用LibeOffice_文件.xlsx你知道吗

执行最后一次调用时,所有集成公式都将重新计算/更新,并创建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了。你知道吗

相关问题 更多 >