我有一個功能,需要一個URL到一個Excel文件,然後將其導出爲PDF:導出Excel文件爲PDF - 陷入試圖關閉Excel文件
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文件,直到我殺死了任務管理器中的EXCEL.EXE。
因此,出於某種原因,我的Excel文件在完成創建PDF後不會關閉。我在代碼中做錯了什麼? (!包括ASP.NET/IIS)
不幸的是,我不能支付這些產品,而免費選項不提供對PDF導出的支持。其實,這裏有一篇帖子,MSFT表示要使用interop功能(http://social.msdn.microsoft.com/Forums/pl/oxmlsdk/thread/26d9879a-6c1f-4a71-8dde-d6a1d9b0b110)。 我看過的其他地方也說只是使用互操作。 所以我在各地都發生了衝突。我寧願不使用互操作 - 你知道我能做到這一點嗎? – Steven 2012-03-06 21:15:22
@Steven對不起,我不知道任何其他方式。 Interop絕對不支持ASP.NET(請參閱我的答案中的第一個鏈接 - 它是來自其知識庫的官方MSFT鏈接)... – Yahia 2012-03-07 05:52:00
謝謝,我剛剛結束了使用itextsharp創建pdf – Steven 2012-03-17 19:04:15