发新话题
打印

请教asp.net中关闭Excel进程的问题,解决就散分!!!!

请教asp.net中关闭Excel进程的问题,解决就散分!!!!

Excel的相关代码如下:   
  Excel.Application   myExcel;   
  Excel._Workbook   myWB;   
  Excel._Worksheet   myWS   =   null;   
  Excel.Range   myRange   =   null;   
  string   filePath   =   Server.MapPath("\\excel\\");   
  string   strP   ="test.xls";   
  FileInfo   file   =   new   FileInfo(strP);   
  try   
  {   
  myExcel   =   new   Excel.Application();   
  myExcel.Visible   =   false;   
  myWB   =   myExcel.Workbooks.Add(true);   
   
  myWS   =   (Excel._Worksheet)myWB.Sheets.Add(Type.Missing,   Type.Missing,   Type.Missing,   Type.Missing);   
  myWS   =   (Excel._Worksheet)myWB.Sheets[1];   
  myExcel.Cells[   1   ,   1   ]   =   "第一行第一列"   ;     
  myExcel.Cells[   1   ,   2   ]   =   "第一行第二列"   ;   
  myExcel.Cells[   2   ,   1   ]   =   "第二行第一列"   ;   
  myWB.SaveAs(file.FullName,   Type.Missing,   Type.Missing,   Type.Missing,   Type.Missing,   Type.Missing,   Excel.XlSaveAsAccessMode.xlNoChange,   Type.Missing,   Type.Missing,   Type.Missing,   Type.Missing);   
  }   
  catch(Exception   e1)   
  {   
  Response.Write("初始化Excel文件出错,错误信息如下:   "+e1.ToString());   
  return;   
  }   
      
  myWB.Close(false,   Type.Missing,   Type.Missing);   
  myExcel.Workbooks.Close();   
  myExcel.Quit();   
  System.Runtime.InteropServices.Marshal.ReleaseComObject(myRange);   
  System.Runtime.InteropServices.Marshal.ReleaseComObject(myWS);   
  System.Runtime.InteropServices.Marshal.ReleaseComObject(myWB);   
  System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);   
  myWS   =   null;   
  myWB   =   null;   
  myExcel   =   null;   
  }   
  ////////////////////////////////////////////////////   
  请教高手,为什么每次执行完,Excel进程都不能关闭呢,我明明写了myExcel.Workbooks.Close();   
  myExcel.Quit();   
  导致其他的Excel文件也打不开。   
  哪为大虾能指点迷津阿,现在卡在这儿,进行不下去了。

TOP

一般来说,你不应该在ASP.NET中使用象Excel这样的东西,因为它们不是用来在后端用的,参考   
   
  INFO:服务器端   Office   自动化应考虑的因素   
  http://support.microsoft.com/kb/257757/zh-cn   
   
  关闭不了,很多时候时候因为Reference   Count>0,所以你需要Release每一个引用,参考   
   
  PRB:使用   Visual   Studio   .NET   客户端执行自动化功能后不退出   Office   应用程序   
  http://support.microsoft.com/kb/317109/zh-cn

TOP

ASP.NET控制EXCEL,完全结束进程     
   
  Excel.Application   ThisApp   =   new   Excel.ApplicationClass();   
        Excel.Workbooks   ThisWbs   =   ThisApp.Workbooks;   
        Excel.Workbook   ThisWb   =   ThisWbs.Open("G:/demo.xls",Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);   
        ThisWb.SaveAs("G:/HelloExcel.xml",Excel.XlFileFormat.xlXMLSpreadsheet,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Excel.XlSaveAsAccessMode.xlNoChange,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);   
   
  //Excel.XlFileFormat.xlXMLSpreadsheet控制存储文件的类型   
        System.Runtime.InteropServices.Marshal.ReleaseComObject(ThisWb);   
        ThisWb   =   null;   
        ThisWbs.Close();   
        System.Runtime.InteropServices.Marshal.ReleaseComObject(ThisWbs);   
        ThisWbs   =   null;   
        System.Runtime.InteropServices.Marshal.ReleaseComObject(ThisApp);   
        ThisApp   =   null;   
        GC.Collect();

TOP

在2000server系统中   使用以下方法(vb.net代码):   
      Dim   xlApp   As   New   Excel.Application   '创建一个excel应用程序对象   
      Dim   xlBooks   As   Excel.Workbooks   '声明一个workbooks对象   
      Dim   xlbook   As   Excel.Workbook   '声明一个xlbook对象   
      Dim   xlSheet   As   Excel.Worksheet   '声明一个xlSheet对象   
   
  try   
            xlBooks   =   xlApp.Workbooks     
            xlbook   =   xlBooks.Add'应使用这种方式创建Workbook   对象   
              
            s   =   Server.MapPath("\xls\a4.xls")   
            xlbook   =   xlBooks.Open(s)   
            xlSheet   =   xlbook.ActiveSheet()   '应使用这种方式创建Worksheet   对象   
                ..   
                ..   
                ..   
  catch   ex   as   exception   
      异常处理代码   
  finally   
          If   Not   xlSheet   Is   Nothing   Then   
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)   
            End   If   
                          If   Not   xlbook   Is   Nothing   Then   
                                  xlbook.Close(False)‘注意这一语句是   必须的     
                                  System.Runtime.InteropServices.Marshal.ReleaseComObject(xlbook)   
                          End   If   
                          If   Not   xlBooks   Is   Nothing   Then   
                                  System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks)   
                          End   If   
   
                          xlApp.Quit()   
                          NAR(xlApp)   
                          GC.Collect()   
  end   try

TOP

//   杀死进程,processName为进程名字   
  private   void   KillProcess(string   processName)   
  {   
  System.Diagnostics.Process   myproc=   new   System.Diagnostics.Process();   
  //得到所有打开的进程   
  try   
  {   
  foreach   (Process   thisproc   in   Process.GetProcessesByName(processName))     
  {   
  if(!thisproc.CloseMainWindow())   
  {   
  thisproc.Kill();   
   
  }   
  }   
  }   
  catch(Exception   Exc)   
  {   
  Page.RegisterStartupScript("","<script   language=javascript>alert('"+Exc.Message.ToString()+"');</script>");   
  return;   
  }   
  Page.RegisterStartupScript("","<script   language=javascript>alert('杀死'+   '"+processName+"'   +'成功!');</script>");   
  }

TOP

发新话题