Excel操作的总结

用ASP.NET进行Excel操作,主要问题集中在两点:
1、 运行权限
  1) Web.config中:<identity impersonate="true"/>
  2) 管理工具>组件服务>计算机>我的电脑>DCOM配置>Microsoft Excel Application>右键>属性>安全
    a. 启用和激活权限>自定义>添加IUSR_XXX>勾上本地启动和本地激活权限
    b. 访问权限>自定义>添加IUSR_XXX>勾上本地访问权限
2、 Excel进程的关闭
  a) 在打开或者新建excel,word的时候,先将当前进程里的word,excel进程的ID记录下来(这些有可能是属于用户已经打开的word或者excel进程,最后删除的时候这些进程是不能kill掉的)

// 在打开excel前,将系统里面已经存在的excel进程进程ID保存起来
List < int >  intList  =   new  List < int > ();

foreach  (System.Diagnostics.Process p  in  System.Diagnostics.Process.GetProcesses())
{
    
if (p.ProcessName.ToUpper() == "EXCEL")
    
{
        intList.Add(p.Id);
    }

}

  b) 进行excel操作

Application app  =   new  Application();
Workbook workbook 
=  app.Workbooks.Open(FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Worksheet worksheet 
=  (Worksheet)workbook.Worksheets[ 1 ];
workbook.Close(Type.Missing, Type.Missing, Type.Missing);
app.Quit();

  c) 关闭就是如何关闭刚才新建的excel进程

// 先用系统提供的方法对系统资源释放,这种做法是大家常用的方法
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
GC.Collect();

// 以下是我的新方法,如果还对象还没有释放的话kill掉新线程
if  (app != null )
{
    
foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses())
    
{   
        
//先判断当前进程是否是excel                 
        if (p.ProcessName.ToUpper() == "EXCEL")
        
{
            
//需要判断这个进程是用户打开的还是属于新建的进程,如果用户没有打开过excel,则直接kill掉这个进程
            if (intList != null && intList.Count > 0)
            
{
                
//用来标志是否是程序新建的
                bool bNewID=true;

                
foreach (int existId in intList)
                
{
                    
if (existId == p.Id)
                    
{
                        bNewID 
= false;
                        
break;
                    }

                }

                
//如果没有匹配到的话,说明是程序新建的,则删除他
                if (bNewID == true)
                
{
                    p.Kill();
                }

            }

            
//之前没有打开过excel进程,则直接kill掉他
            else
            
{
                p.Kill();
            }

        }

    }

}

Excel进程关闭抄自:http://www.cnblogs.com/farrell/archive/2008/01/25/1053349.html,版权归原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值