簡體   English   中英

從 Python 網絡應用程序:將數據插入電子表格(例如 LibreOffice / Excel),計算並另存為 pdf

[英]From Python web app: insert data into spreadsheet (e.g. LibreOffice / Excel), calculate and save as pdf

我面臨的問題是,我想將 python 網絡應用程序(在 Tornado Webserver 和 Ubuntu 上運行)中的數據(一個大數據框和一個圖像)推送到電子表格中,計算,另存為 pdf 並交付到前端。

我查看了幾個像 openpyxl 這樣的庫,用於在 MS Excel 中編寫表格,但這只能解決一個問題。 我正在考慮使用 LibreOffice 和 pyoo,但在導入 pyuno 時,我的后端似乎需要與 LibeOffice 附帶的相同的 python 版本。

有人已經解決了類似的問題,並建議如何解決這個問題?

謝謝

我想出了一個讓我們說不漂亮但罕見的解決方案,它對我來說非常靈活。

  • 使用 openpyxl 打開包含布局(模板)的現有 Excel 工作簿
  • 將數據框插入到該工作簿中的單獨工作表中
  • 使用 openpyxl 保存為temporary_file.xlsx
  • 使用 --headless --convert-to pdf 臨時文件.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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM