将Excel文件导出为PDF-尝试关闭Excel文件时遇到问题

本文关键字:Excel 文件 问题 遇到 PDF- | 更新日期: 2023-09-27 18:26:51

我有一个函数,它将url带到Excel文件,然后将其导出为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();处给了我错误:

远程过程调用失败。(HRESULT:0x800706BE的异常)

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

如果我尝试删除我的Excel文件,我会收到一个错误,说该文件正被另一个进程使用,并且在我杀死任务管理器中的Excel.EXE之前,我无法删除我的Excel文件。

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

将Excel文件导出为PDF-尝试关闭Excel文件时遇到问题

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

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

要在不需要Office等的情况下处理Excel文件,在服务器场景中有几个选项(免费和商业):

我可以推荐Aspose.Cells和Flexcel-都带有PDF导出功能。。。没有尝试SpreadsheetGear,但听到并阅读了很多关于它的好东西…

免费选项(尽管仅适用于较新的xlsx格式,不确定它们是否支持PDF导出!)例如来自MS和EPPlus的OpenXML2。

我知道这个"官方"已经被回答为"不支持"。也就是说,我遇到了同样的问题。

真正的例外是转移注意力。真正的问题是权限。

您可以将web服务设置为以具有足够权限的用户身份运行(这并不总是一个好主意),也可以进入DCOMCNFG并更改Excel应用程序的权限,以便您的系统用户拥有正确的访问权限。

我希望这对将来的某个人有所帮助。

您可以使用以下代码将excel文件导出为pdf:

// Saving an XLS file in Aspose.Pdf xml format
Workbook wb = new Workbook();
wb.Open("C:''book1.xls);
wb.Save("C:''xls2pdf.xml", FileFormatType.AsposePdf);
// Converting XLS file to PDF through Aspose.Pdf using Aspose.Pdf xml file as a medium
Aspose.Pdf.Pdf pdf = new Aspose.Pdf.Pdf();
pdf.BindXML("c:''xls2pdf.xml", null);
pdf.Save("C:''xls2pdf.pdf");

You can download Aspose.pdf from the following link
http://www.aspose.com/community/files/51/.net-components/aspose.pdf-for-.net/category1184.aspx
You can download Aspose.cells from the following link
http://www.aspose.com/community/files/51/.net-components/aspose.pdf-for-.net/category1184.aspx
  1. 安装2007 Microsoft Office Suite Service Pack 3(SP3)http://www.microsoft.com/en-in/download/details.aspx?id=27838

  2. 安装2007 Microsoft Office加载项:Microsoft另存为PDF或XPShttp://www.microsoft.com/en-in/download/details.aspx?id=7

强制:Microsoft XPS Document Writer设置为服务器中的默认打印机。因为ExportAsFixedFormat函数执行Microsoft XPS Document Writer将Excel转换为PDF。

这对我有用。