[問題] ASP.NET with C# Error Handling
程式功能 : (如以下程式片段)
經由 url 給定 filename及 datestring ,
程式呼叫Excel COM讀取該檔案然後另存新檔
再download 此 File 到 client 端
問題描述 :
正常情況下程式都可正常運作
但有時候會有 COM Error 的情況發生 (發生問題不明)
當有 Error 發生時 程式就會轉到Catch那一段輸出 Error Message
現在的問題是如何在 Error Processing (即 Catch 裡)加上關掉 COM Object的程式
亦即用綠色標起來那一段
如果直接加那一段沒改變的話
會產生找不到變數的錯誤
請問該如何處理呢
[Defauls.aspx.cs]
using Microsoft.Office.Interop.Excel;
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try
{
string InputFile = Request.QueryString["file_name"];
string DateStr = "_"+Request.QueryString["date_str"];
string ProcessMode = Request.QueryString["mode"];
string OutputFile = InputFile.Replace(DateStr, "");
string FilePath = "F:\\excel_process\\"+InputFile;
if (!System.IO.File.Exists(FilePath))
{
Response.Write("<script language=\"javascript\">\n");
Response.Write("alert(\"Internal Error!!\");\n");
Response.Write("</script>\n");
return;
}
Microsoft.Office.Interop.Excel.Application xlApp =
new Microsoft.Office.Interop.Excel.ApplicationClass();
Microsoft.Office.Interop.Excel.Workbook xlBook =
xlApp.Workbooks.Open(FilePath);
Microsoft.Office.Interop.Excel.Worksheet xlSheet =
(Microsoft.Office.Interop.Excel.Worksheet)xlBook.Worksheets.Item[1];
string SaveFilePath = "F:\\excel_process\\" +OutputFile;
xlBook.SaveAs(SaveFilePath);
//close all object Start
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet);
xlSheet = null;
xlBook.Close(false, Type.Missing, Type.Missing);
xlApp.Workbooks.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);
xlBook = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp.Workbooks);
xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
xlApp = null;
GC.Collect();
GC.WaitForPendingFinalizers();
//close all object end
if ((ProcessMode == "")||(ProcessMode == null))
{
Response.AppendHeader("Content-Type", "application/X-MS-Excel;");
Response.AppendHeader("Content-Disposition",
"attachment; filename=" + OutputFile);
Response.WriteFile(SaveFilePath);
}
}
catch (Exception error_msg)
{
Response.Write("<BR>[Error]<BR>" + error_msg.ToString());
}
}
}
}
[Default.aspx]
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="WebApplication1._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"" rel="nofollow">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="" rel="nofollow">http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.184.146
※ 編輯: cyril63 來自: 118.169.184.146 (11/23 14:29)
推
11/29 15:48, , 1F
11/29 15:48, 1F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 3 篇):