.net - 如何以编程方式填写和获取 Excel 电子表格的 PDF 输出?
问题描述
我有一个 Excel 工作簿,允许我输入某些字段的值,单击一个按钮,然后根据我的输入生成一个 PDF 报告。然后我必须选择保存此 PDF 文件的目录。
我必须创建一个类似 REST 的 API,它将接收带有 Excel 工作表输入参数的有效负载,并返回生成的 PDF 文件。
我无法访问 Workbook 中的宏、数据和逻辑,因此我不能直接在我的 API 中实现相同的逻辑。工作簿也会定期更改(公式、宏等),唯一保留的就是输入字段和 PDF 输出。
在对这个库进行了一些测试之后,我不确定它是否允许我调用一个按钮(生成 PDF)并指定输出目录。我主要使用 C# 和 .NET,我该如何实现呢?
解决方案
您是否考虑过使用 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
}
推荐阅读
- cron - 如何在 Magento 2 中通过管理员动态设置 cron
- networking - 在 net-snmp 上使用 snmpget 发现多个设备的网络
- java - Jenkins 通过脚本而不是 Maven Goal 运行 maven 项目
- charles-proxy - 如何将 GET 和 POST 重写到具有不同响应主体的同一端点?
- spring-boot - 如何将参数从spring boot应用程序传递到keycloak?
- arrays - 为什么python数组中的整数后缀为
- linux - 在 Cent-OS 7 引导中运行交互式 shell 脚本
- matlab - Matlab 代码正在生成视频文件,但没有将任何帧写入文件
- stata - append 后变量名的不同情况
- ios - AWSKinesisRecorder 获取未流式传输的记录