如何以编程方式填写和获取 Excel 电子表格的 PDF 输出?

Posted

技术标签:

【中文标题】如何以编程方式填写和获取 Excel 电子表格的 PDF 输出?【英文标题】:How can I fill and get the PDF output of a Excel spreadsheet programmatically? 【发布时间】:2019-01-29 22:30:20 【问题描述】:

我有一个 Excel 工作簿,允许我输入某些字段的值,单击一个按钮,然后根据我的输入生成一个 PDF 报告。然后我必须选择保存此 PDF 文件的目录。

我必须创建一个类似 REST 的 API,它将接收带有 Excel 工作表输入参数的有效负载,并返回生成的 PDF 文件。

我无法访问工作簿中的宏、数据和逻辑,因此我不能直接在我的 API 中实现相同的逻辑。工作簿也会定期更改(公式、宏等),唯一保留的就是输入字段和 PDF 输出。

在使用this library 进行一些测试后,我不确定它是否允许我调用按钮(生成 PDF)并指定输出目录。我主要使用 C# 和 .NET,我该如何实现呢?

【问题讨论】:

如果只有 Excel 可以计算您想要的,那么您需要找到一种方法来自动化 Excel 服务器端,这会带来技术(和许可)问题:support.microsoft.com/en-us/help/257757/…。或者使用新的 Excel REST (Graph) API:developer.microsoft.com/en-us/graph/docs/concepts/… 不确定您是否可以使用它导出 PDF... Npoi 直接处理文件,但无法生成 pdf。 EPPlus 一样。有执行此类任务的免费库(也有商业库)。在我看来,最好的方法是直接编写 pdf 文件(即使用 iTextSharp)。它有点复杂,但您可以完全控制输出,并且不需要安装其他依赖项。 【参考方案1】:

您是否考虑过使用 Excel 互操作库?您可以通过安装 Microsoft.Office.Interop.Excel 包通过 Nuget 获得它。

这将允许您打开工作簿,将一些值写入一些单元格,然后运行按钮调用的宏。

// Start a new instance of Excel
var app = new Interop.Application();

// Open the workbook 
var workbook = app.Workbooks.Open(path);

// Set some values
workbook.Worksheets["Sheet1"].Range["A1"].Value2 = 123;

// Run the macro
app.Run("Module1.MyMacro");

不过,这有一些限制。运行它的计算机必须安装 Excel,因为 Interop 库实际上是在打开 Excel。此外,Application.Run 方法将在宏实际完成运行之前立即返回。您可以通过不断检查是否出现 PDF 输出文件来解决此问题:

while (!File.Exists(path))

    Thread.Sleep(5000); // wait for 5 seconds

【讨论】:

以上是关于如何以编程方式填写和获取 Excel 电子表格的 PDF 输出?的主要内容,如果未能解决你的问题,请参考以下文章

pandas 以格式化方式读取 excel

以编程方式获取电子表格创建者的邮件地址

怎样做电子表格

怎么可能没有。以编程方式获取 OpenOffice.org 电子表格中的页数?

能设计一个软件,将需要填写的EXCEL表格生成为网页,在浏览器中填表吗?

OpenOffice 搜索表以编程方式