首页 新闻 会员 周边 捐助

asp.net通过模板写excel时,进程无法有效的关闭

0
悬赏园豆:60 [已解决问题] 解决于 2012-02-13 10:25

环境

OS:Windows Server 2003

OFFICE2003

.NET 3.5

在server上有做如下的配置

1.配置DCOM中的Microsoft Excel应用程序启动激活,访问,配置权限给NETWORK,NETWORK SERVICE

2.对用的目录有写的权限

 

过程是先写Excel文件,再导出到客户端,出现解决访问。

 

查看服务器进程,发现Excel没有关闭,猜测原因可能是第一个Excel进程没有关闭,导致第二个下载的进程无法访问,出现拒绝访问的提示。

关闭Excel进程的代码如下,采用kill的方式:

 private static void KillExcelProcess()
{
System.Diagnostics.Process[] myProcesses;
DateTime startTime;
myProcesses = System.Diagnostics.Process.GetProcessesByName("Excel");

//µÃ²»µ½Excel½ø³ÌID£¬ÔÝʱֻÄÜÅжϽø³ÌÆô¶¯Ê±¼ä
foreach (System.Diagnostics.Process myProcess in myProcesses)
{
startTime = myProcess.StartTime;

if (startTime > beforeTime && startTime < afterTime)
{
myProcess.Kill();
myProcess.Dispose();
}
}
}

 

最后发现还是无法关闭,请教园子里的高人有没有碰到过这种情况,和有没有更好的方式来关闭Excel进程?


 

问题补充:

感谢园子里这么多朋友的回复,这是个老问题了,通过分析还是建议避开需对Excel的操作,使用第三方的控件,现在问题已经得到圆满解决,再次感谢!

changbluesky的主页 changbluesky | 小虾三级 | 园豆:854
提问于:2012-02-10 08:44
< >
分享
最佳答案
0

为何不用NPOI?不存在关闭进程的问题

收获园豆:15
找事的狐狸 | 菜鸟二级 |园豆:474 | 2012-02-11 14:52

NPOI确实比较好用,效率也很快,并且开源的。

changbluesky | 园豆:854 (小虾三级) | 2012-02-13 10:15
其他回答(7)
0

写Excel最好不要用这种调用Excel软件的方式。拒绝访问就是没有权限嘛。所以你这种方式哪里打开,哪里关闭啦。

收获园豆:5
ChatinCode | 园豆:2272 (老鸟四级) | 2012-02-10 08:55

权限肯定是有的,问题是关闭不了excel进程。

支持(0) 反对(0) changbluesky | 园豆:854 (小虾三级) | 2012-02-10 10:11

@我爱菊花: 你真的理解进程的安全机制吗?

支持(0) 反对(0) ChatinCode | 园豆:2272 (老鸟四级) | 2012-02-10 14:50

@ChatinCode: 似乎是客户Server有问题,客户说重装系统之后就OK了。

支持(0) 反对(0) changbluesky | 园豆:854 (小虾三级) | 2012-02-13 10:19
0
收获园豆:5
lonely_rain | 园豆:752 (小虾三级) | 2012-02-10 09:39
0

在asp.net上导出excel,建议你使用模板替换或三方的类库;这样简单好用;

收获园豆:5
画方软件 | 园豆:778 (小虾三级) | 2012-02-10 10:24
0

aspose.cells是个不错的组件,虽然是收费的,但是你懂的。dcom存在很多问题,而且服务器上装office不太好。

收获园豆:10
喵喵喵猫 | 园豆:1742 (小虾三级) | 2012-02-10 10:43
0

asp.net 导出excel最好是用html的table来做,那样做很简单的,附上代码

public void OutPutExcel()
{
//定义文档类型、字符编码
Response.Clear();
   Response.Buffer= true;
   Response.Charset="GB2312";
//下面这行很重要, attachment 参数表示作为附件下载,您可以改成 online在线打开
  
//filename=FileFlow.xls 指定输出文件的名称,注意其扩展名和指定文件类型相符,可以为:.doc    .xls    .txt   .htm
   Response.AppendHeader("Content-Disposition","attachment;filename=FileFlow.xls");
   Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
   //Response.ContentType指定文件类型 可以为application/ms-excel、application/ms-word、application/ms-txt、application/ms-html 或其他浏览器可直接支持文档
   Response.ContentType = "application/ms-excel";
   this.EnableViewState = false;
// 定义一个输入流
   System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
   System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);

this.RenderControl(oHtmlTextWriter);
   //this 表示输出本页,你也可以绑定datagrid,或其他支持obj.RenderControl()属性的控件
   Response.Write(oStringWriter.ToString());
   Response.End();
}
收获园豆:10
az235 | 园豆:8483 (大侠五级) | 2012-02-10 16:47

感谢分享!

支持(0) 反对(0) changbluesky | 园豆:854 (小虾三级) | 2012-02-13 10:18
0

web的形式很有可能是正在使用的excel进程。你应该是关闭不了的吧!

收获园豆:5
小小刀 | 园豆:1991 (小虾三级) | 2012-02-10 21:10

Kill掉Excel进程就可以,客户的Server似乎有问题,Kill也杀不掉Excel的进程,客户的Server似乎有问题,重装系统却可以了,这样存在误杀的可能性。

支持(0) 反对(0) changbluesky | 园豆:854 (小虾三级) | 2012-02-13 10:17
0

System.Runtime.InteropServices.Marshal.ReleaseComObject 也没有作用么?

收获园豆:5
Paradox | 园豆:105 (初学一级) | 2012-02-12 17:49

是的,Release不了,必须Kill掉Excel的进程才可以。

支持(0) 反对(0) changbluesky | 园豆:854 (小虾三级) | 2012-02-13 10:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册