C# 将Excel文件导出为PDF-尝试关闭Excel文件时遇到问题
我有一个函数,它将url导入Excel文件,然后将其导出为pdf:C# 将Excel文件导出为PDF-尝试关闭Excel文件时遇到问题,c#,asp.net,file-io,com-interop,office-interop,C#,Asp.net,File Io,Com Interop,Office Interop,我有一个函数,它将url导入Excel文件,然后将其导出为pdf: public static void ExportFromExcel(string url) { // Create COM Objects Application excelApplication = new Application(); Workbook excelWorkbook = excelApplication.Workbooks.Open(HttpContext.Curre
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。但是页面挂起很长时间,然后在excelWorkbook.Close()处出现错误代码>在我的pdf代码中:
远程过程调用失败。(HRESULT的例外:0x800706BE)
这些文件实际上是被创建的。但是如果我转到文件目录,也会有一个临时Excel文件(我的Excel文件名前面有~$
)
如果我尝试删除我的Excel文件,我会收到一个错误,说明该文件正被另一个进程使用,并且在任务管理器中杀死Excel.EXE之前,我无法删除我的Excel文件
因此,由于某些原因,我的Excel文件在创建完pdf后不会关闭。我的代码是否出错?MS不支持在服务器(包括ASP.NET/IIS!)上使用互操作-请参阅
由于Windows Vista MS引入了一些与安全相关的措施,这些措施可防止Windows服务(如IIS上的ASP.NET)执行“类似桌面”的操作(访问打印机、访问网络共享等)。。。这意味着您必须绕过几个安全措施才能使其正常工作(不推荐!)
要处理Excel文件而无需任何Office等。在服务器场景中,有几个选项(免费和商业):
我可以推荐和-两者都带有PDF导出功能。。。没有尝试,但听到并阅读了很多关于它的好东西
免费选项(尽管仅适用于较新的xlsx格式,但不确定它们是否支持PDF导出!)例如和。您可以使用以下代码将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
我知道这个“官方”的回答是“不支持”。也就是说,我遇到了同样的问题
实际的例外有点像是在转移视线。真正的问题是权限
您可以将web服务设置为以具有足够权限的用户身份运行(这并不总是一个好主意),也可以进入DCOMCNFG并更改Excel应用程序的权限,以便您的系统用户具有正确的访问权限
我希望这对将来的人有所帮助
安装2007 Microsoft Office Suite Service Pack 3(SP3)
安装2007 Microsoft Office加载项:Microsoft另存为PDF或XPS
必填项:将Microsoft XPS Document Writer设置为服务器中的默认打印机。
因为ExportAsFixedFormat函数执行Microsoft XPS Document Writer将Excel转换为PDF
这对我有用。不幸的是,我付不起这些产品的费用,而且免费选项不支持PDF导出。实际上,这里有一篇帖子,MSFT说要使用互操作功能()。我看过的其他地方也都说要使用互操作。所以我到处都有矛盾的意见。我不想使用互操作-你知道我可以用什么其他方法吗?@Steven抱歉,我不知道其他方法。ASP.NET绝对不支持Interop(请参阅我答案中的第一个链接-这是他们知识库中的官方MSFT链接)…谢谢,我刚刚使用itextsharp创建了pdf