你可以用别的方法连接
我常用的
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;
  } }
}

解决方案 »

  1.   

    2楼的程序答非所问,我是说不打开Excel就用OLE连接,而且以我的经验,你的方法根本不能让Excel进程退出,我一般都是找PROCESS再强行KILL
      

  2.   

    Excel.Worksheet xSheet=(Excel.Worksheet)xBook.Sheets[1];
    这一句就是回答你的问题的
    这样的确存在这样的问题
    我也只能kill Excel 的Process
      

  3.   

    但是你这样还是打开了Excel,我就是想知道有没有方法不打开excel直接用OLE连接到这个Excel的第一个工作表的方法