asp.net and Excel互操作问题

tangligang 2003-11-25 04:06:53
我想用下面这段代码实现在服务器端打开一个Excel应用,然后进行其他错作。
出现的问题是:1:Excel应用不可见
2:Excel进程没有关掉,在任务管理器中也是拒绝访问,不能关

Excel.ApplicationClass xlApp = new ApplicationClass() ;
xlApp.UserControl = true;
xlApp.Visible = true;

Excel.Workbooks xlbooks = xlApp.Workbooks;
Excel._Workbook xlbook = xlApp.Workbooks.Add (XlWBATemplate.xlWBATWorksheet );
Excel.Sheets xlsheets = xlbook.Worksheets ;
Excel._Worksheet xlsheet = (Excel._Worksheet )xlsheets.get_Item (1);


xlbooks.Close();
xlApp.Application .Workbooks.Close ();
xlApp.Application .Quit ();
xlApp.Quit ();
...全文
34 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaopaopao 2003-11-28
  • 打赏
  • 举报
回复
=null后excel进程也不一定消失,还会在内存里滞留,这只有在webForm里调用会出现这样的情况
smartcreater 2003-11-25
  • 打赏
  • 举报
回复
修改:
private string ReleaseObject(object o)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
catch(Exception e)
{
o = null; //<---- add this statement
return "release object failure:" + e.Message;
}
finally
{
o = null;
}
return null;
}
smartcreater 2003-11-25
  • 打赏
  • 举报
回复
Microsoft solution:
-------------------------
http://support.microsoft.com/?id=317109
---------------------------------
Microsoft.Office.Interop.Word.Application oApp =null ;
Microsoft.Office.Interop.Word.Document oDoc =null;

try
{
oApp = new Microsoft.Office.Interop.Word.Application();
// oApp.Visible = false;
oDoc = new Microsoft.Office.Interop.Word.DocumentClass();
oApp.Documents.Open2000(ref fileName,
ref optional ,ref optional,ref optional,ref optional,ref optional,ref optional,
ref optional,ref optional,ref optional,ref optional,ref isVisible);
oDoc.Activate();
}
catch(ComException e1)
{
}
finally
{
ReleaseObject(oDoc);
oApp.Quit(ref optional,ref optional,ref optional);
ReleaseObject(oApp);
}

}
private string ReleaseObject(object o)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
catch(Exception e)
{
return "release object failure:" + e.Message;
}
finally
{
o = null;
}
return null;
}
-------------------
用try ...finally 可以确保发生异常时 释放 Office COM 对象
tangligang 2003-11-25
  • 打赏
  • 举报
回复
后台确实可以,同样的代码就能执行成功
yaopaopao 2003-11-25
  • 打赏
  • 举报
回复
先把application下面的所有引用的对象依次close并且用System.Runtime.InteropServices.Marshal.ReleaseComObject(object);
回收掉,最后在app.quit()
还有在webform上操作excel不太稳定,只要出现异常excel进程就会滞留内存,尽量不要采用这种方式调用吧,使用后台进程能100%干掉进程
维她奶 2003-11-25
  • 打赏
  • 举报
回复
up

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧