gpt4 book ai didi

c# - 将 Excel 文件导出为 PDF - 在尝试关闭 Excel 文件时卡住

转载 作者:行者123 更新时间:2023-11-30 15:04:56 24 4
gpt4 key购买 nike

我有一个函数,可以获取 Excel 文件的 url,然后将其导出为 pdf:

public static void ExportFromExcel(string url)
{
// Create COM Objects
Application excelApplication = new Application();
Workbook excelWorkbook =
excelApplication.Workbooks.Open(HttpContext.Current.Server.MapPath(url));

try
{
// Call Excel's native export function
excelWorkbook.ExportAsFixedFormat(
XlFixedFormatType.xlTypePDF,
HttpContext.Current.Server.MapPath(url.Replace(".xlsx", ".pdf")));
}
catch (Exception ex)
{

}
finally
{
// Close the workbook, quit Excel, and clean up regardless of the results
excelWorkbook.Close(); // HANGS AND FAILS HERE
excelApplication.Quit();

excelApplication = null;
excelWorkbook = null;
}
}

我正在做的是创建一个 Excel 文件,然后立即从该文件创建一个 pdf:

using (FileStream fs = File.Create(HttpContext.Current.Server.MapPath(filePath)))
{
byte[] data = pck.GetAsByteArray();
fs.Write(data, 0, data.Length);
}

Pdf.ExportFromExcel(filePath);

它会很好地创建 Excel 文件,它还会创建 pdf。但是页面挂了很长时间,然后在我的 pdf 代码中的 excelWorkbook.Close(); 处给我错误:

The remote procedure call failed. (Exception from HRESULT: 0x800706BE)

文件实际上是被创建的。但是如果我转到文件目录,还有一个临时 Excel 文件(我的 Excel 文件名前面有 ~$)。

如果我尝试删除我的 Excel 文件,我收到一条错误消息,指出该文件正在被另一个进程使用,并且我无法删除我的 Excel 文件,直到我在任务管理器中终止 EXCEL.EXE。

因此出于某种原因,我的 Excel 文件在完成创建 pdf 后不会关闭。我的代码有问题吗?

最佳答案

MS 不支持在服务器上使用 Interop(包括 ASP.NET/IIS!)- 参见 http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2

由于 Windows Vista MS 引入了一些与安全相关的措施,这些措施阻止 Windows 服务(如 IIS 上的 ASP.NET)执行“类似桌面”的操作(访问打印机、访问网络共享等)...这意味着您必须绕过一些安全措施才能使其正常工作(不推荐!)。

要在服务器场景中处理 Excel 文件而不需要 Office 等,有多种选择(免费和商业):

我可以推荐Aspose.CellsFlexcel - 都带有 PDF 导出功能......没试过 SpreadsheetGear但是听到+读到很多关于它的好东西...

免费选项(尽管仅适用于较新的 xlsx 格式,不确定它们是否支持 PDF 导出!)例如 OpenXML 2 from MSEPPlus .

关于c# - 将 Excel 文件导出为 PDF - 在尝试关闭 Excel 文件时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591087/

24 4 0
文章推荐: c# - 使用 AutoMapper 从 ICollection 映射到 ICollection 到 ICollection