用com输出完用saveas时进程会关闭
用ThisWorkBook.Saved = TrueApp.Workbooks.Close()
App.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(App)
ThisSheet = Nothing
ThisWorkBook = Nothing
App = Nothing
进程还是关不了

解决方案 »

  1.   

    private void KillExcelProceed()
      {
       int ProceedingCount = 0;
       System.Diagnostics.Process[] ExcelProcesses;
       ExcelProcesses = System.Diagnostics.Process.GetProcessesByName("EXCEL");   foreach(System.Diagnostics.Process IsProcedding in ExcelProcesses)
       {
        if(IsProcedding.ProcessName=="EXCEL")
        {
         ProceedingCount += 1;
        }
       }
       if(ProceedingCount > 0)
       {
        DialogResult result;
        result=MessageBox.Show("发现系统中有Excel进程,要关闭所有Excel进程吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Information);
        
        if(result==DialogResult.Yes)
        {
         foreach(System.Diagnostics.Process myProcess in ExcelProcesses)
         {
                myProcess.Kill();     }
        }
       }
      

  2.   

    to bbwolfcool(bb_wolf_cool)
    只能一起关吗
      

  3.   

    文章标题:C#操作EXCEL 
    文章来源:夜隼之家 加入时间:2005-3-14 14:59:51 阅读次数: 后退一步 双击滚动 
    页面功能:【字体:大 中 小】背景颜色:     【打印】【关闭】  
    using System;
    using System.Reflection;namespace CExcel1
    {  class Class1
     {  [STAThread]
      static void Main(string[] args)
      {//创建Application对象 
       Excel.Application xApp=new Excel.ApplicationClass();   xApp.Visible=true; 
       //得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件
       Excel.Workbook xBook=xApp.Workbooks._Open(@"D:\Sample.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);
       //xBook=xApp.Workbooks.Add(Missing.Value);//新建文件的代码
       //指定要操作的Sheet,两种方式:Excel.Worksheet xSheet=(Excel.Worksheet)xBook.Sheets[1];
       //Excel.Worksheet xSheet=(Excel.Worksheet)xApp.ActiveSheet;
       //读取数据,通过Range对象
       Excel.Range rng1=xSheet.get_Range("A1",Type.Missing);
       Console.WriteLine(rng1.Value2);
       //读取,通过Range对象,但使用不同的接口得到Range
       Excel.Range rng2=(Excel.Range)xSheet.Cells[3,1];
       Console.WriteLine(rng2.Value2);
       //写入数据   Excel.Range rng3=xSheet.get_Range("C6",Missing.Value);
       rng3.Value2="Hello";
       rng3.Interior.ColorIndex=6; //设置Range的背景色//保存方式一:保存WorkBook
       //xBook.SaveAs(@"D:\CData.xls",Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value 
       // ,Excel.XlSaveAsAccessMode.xlNoChange,Missing.Value,Missing.Value,Missing.Value//,Missing.Value,Missing.Value);//保存方式二:保存WorkSheet
       //xSheet.SaveAs(@"D:\CData2.xls",Missing.Value,Missing.Value,Missing.Value,Missing.Value//,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);//保存方式三
       xBook.Save();   xSheet=null;   
       xBook=null;
       xApp.Quit(); //这一句是非常重要的,否则Excel对象不能从内存中退出
       xApp=null;
      } }

     
      

  4.   

    to deadshot123(随风缘)
    不要保存时excel进程就退不出啊
      

  5.   

    Excel.Application excel=new Excel.ApplicationClass();
    object oMissing=System.Reflection.Missing.Value;
    excel.Application.Workbooks.Open(Path,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing); Excel.Workbook myBook=excel.Workbooks[1];
    Excel.Worksheet mySheet=(Excel.Worksheet)myBook.Worksheets[1];
    string ss=mySheet.Name;
    Console.WriteLine(ss);
    excel.Application.Workbooks.Close();
    return ss;
      

  6.   

    to 3echo(风一样的男子) 
    还是关不了的
      

  7.   

    听说dcomcnfg可以,不知怎么实现
      

  8.   

    试试在 这段程序的外层调用 GC.collectApp.Workbooks.Close()
    App.Quit()
    System.Runtime.InteropServices.Marshal.ReleaseComObject(App)
    ThisSheet = Nothing
    ThisWorkBook = Nothing
    App = Nothing
      

  9.   

    97ce_twinkle(毛毛虫)
    这个也试过没用啊
      

  10.   

    http://community.csdn.net/Expert/topic/4252/4252815.xml?temp=.6903498
      

  11.   

    现在如下
    App.Application.Workbooks.Close()
    App.Quit() 
    Dim generation As Int32 = System.GC.GetGeneration(App)
    App = Nothing
    System.GC.Collect(generation)
    GC.Collect()我这System.GC.GetGeneration(App) = 0  有点怪
    winform还是不行啊
      

  12.   

    不是在程序末尾加,而是在程序外面加,
    假设代码放在一个叫func1的函数里
    那么在
     
    func1();
    后面加GC.collect();
      

  13.   

    要把自己多开启的所有对象都关闭。
    最好写个析构函数。
    还有,继承System.IDispose接口?
      

  14.   

    to 97ce_twinkle(毛毛虫)
    已解决,谢了