作者cyril63 (...)
看板Programming
标题[问题] ASP.NET with C# Error Handling
时间Mon Nov 23 14:26:25 2009
程式功能 : (如以下程式片段)
经由 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"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
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)
1F:推 horngsh:用dotNet的OLEDB PROVIDER也可以处理EXCEL 59.126.189.127 11/29 15:48