关于asp.net访问Excel的问题

本文详细介绍了使用ASP.NET访问Excel时常见的权限问题及其解决方案,并提供了一种有效的方法来确保Excel进程在操作完成后能够正常关闭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于asp.net访问Excel的问题,现在已经出现了很多了,我只谈谈几个比较典型的问题

1.权限问题

相信用过Excel.exe的朋友都遇到过拒绝访问的问题,我在这里把所有的解决方法都说下

1.首先要保证运行Excel.exe的机器上有Office,版本要和你用的Excel.exe要相同。

2.定位到C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322 这个目录你会看见2个文件夹,Temporary ASP.NET Files和ASP.NETClientFiles,把这个2个文件夹都赋值上asp.net,administrators的完全访问权限

3.定位到C:/Documents and Settings你会看见一个和你的计算机名字一样的文件夹,打开他里面有个ASPNET文件夹,把改文件夹赋值上asp.net,administrators的完全访问权限

4.打开组件服务管理器(控制面板里面)定位到计算机-》我的电脑-》DCOM配置-》microsft Excel,右键属性,然后点安全,把这3个权限设置都用自定义设置,都添加上asp.net, IUSER, IWAM, administrator,everyone都赋值上完全控制权限。

到现在基本上就可以解决asp.net拒绝访问的问题

2.Excel能够成功访问,但是成功访问后进程不能自动关闭,这是个非常危险的事情,在这里我提供一个比较好的办法,不是手动去杀进程,我看了很多资料总觉得这个方法是最好的

private void ExecExcel(string file)
  {

  if(System.IO.File.Exists(file))
    System.IO.File.Delete(file);
   Application exc=new Excel.ApplicationClass();
   exc.Visible=false;
   exc.UserControl=false;
   exc.DisplayAlerts=false;
   Workbooks workbooks=exc.Workbooks;
   _Workbook workbook=workbooks.Add(XlWBATemplate.xlWBATWorksheet);
   Sheets sheets=workbook.Worksheets;
   _Worksheet worksheet=(_Worksheet)sheets.get_Item(1);

//....这里可以做很多需要做的事情

       workbook.SaveAs(file,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Excel.XlSaveAsAccessMode.xlExclusive,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);
   workbook.Close(null,null,null);
   exc.Workbooks.Close();
   exc.Application.Quit();
   exc.Quit();
   this.ReleaseComBoject(worksheet);
   this.ReleaseComBoject(workbook);
   this.ReleaseComBoject(exc);
   
  }

private void ReleaseComBoject(object obj)
  {
   if(obj==null)
   {
    System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
    obj=null;
   }
  }

//以上上执行Excel的常规代码,下面是调用代码

public delegate void CallExcelDel(string file);

  private void Button1_Click(object sender, System.EventArgs e)
  {
   try
   {
    string file=Server.MapPath(@"DownLoad/temp/"+Session["EmployerID"].ToString()+"YWYTICJB.xls");//位置可以任意指定,但是要有访问权限
    CallExcelDel del=new CallExcelDel (this.ExecExcel);
    IAsyncResult ar=del.BeginInvoke(file,null,null);//异步调用执行Excel的方法
    while(!ar.IsCompleted)
    {
     System.Threading.Thread.Sleep(300);
    }
    GC.Collect();//这条语句非常关键,调用的时候一定要在主线程中调用,完毕后你会发现Excel进程不见了
    this.DownloadFile(file);
   }
   catch(Exception E)
   {
    Response.Write(E.Message);
   }
  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值