をファイルクローズしようとして立ち往生:私がやっている何エクスポートエクセルPDFにファイルを - 私は、ExcelファイルへのURLを取る機能があり、その後、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ファイルを作成します。しかし、ページが長時間ハングアップした後、私に私のpdfコードでexcelWorkbook.Close();
でエラーを与える:
リモートプロシージャコールに失敗しました。 (HRESULTからの例外:0x800706BE)
実際にファイルが作成されます。しかし、私がファイルディレクトリに行くと、一時Excelファイル(Excelファイル名の前に~$
がある)もあります。
Excelファイルを削除しようとすると、そのファイルが別のプロセスで使用されているとエラーが表示され、タスクマネージャーでEXCEL.EXEを終了するまでExcelファイルを削除できません。
何らかの理由で、私のExcelファイルがpdfの作成を終了した後に閉じられません。私のコードで何か間違っていますか? (!ASP.NET/IISを含む)は、サーバー上の相互運用機能を使用して
残念ながら、私はそれらの製品の代金を支払う余裕がなく、無料のオプションはPDFエクスポートをサポートしていません。実際には、MSFTが相互運用機能を使用すると言う投稿があります(http://social.msdn.microsoft.com/Forums/pl/oxmlsdk/thread/26d9879a-6c1f-4a71-8dde-d6a1d9b0b110)。 私が見た他の場所でも、interopだけを使用するとも言われています。 だから、私は矛盾した意見を全部得ている。私はむしろinteropを使用しないでください - 私はこれを行うことができる他の方法を知っていますか? – Steven
@スティーブン申し訳ありませんが、他の方法はわかりません。 InteropはASP.NETではまったくサポートされていません(私の答えの最初のリンクを参照してください - 知識ベースの公式MSFTリンクです)... – Yahia
ありがとう、私はちょうどitextsharpを使ってpdfを作成しました – Steven