100分求操作Excel方法!
小弟最近在做一个操作Excel的项目,部分需求的内容是将DataTable数据集中的数据导出到Excel中,并进行打印和打印预览 
 操作。在操作中想使用“以文件方式打开并输出数据”的方式,但是在操作中遇到如下 
 错误: 
 错误	1	类型“Microsoft.Office.Interop.Excel.Sheets”在未被引用的程序集中定义。必须添加对程序集“Microsoft.Office.Interop.Excel,   Version=11.0.0.0,   Culture=neutral,   PublicKeyToken=71e9bce111e9429c”的引用。	C:\Documents   and   Settings\haokb\My   Documents\Visual   Studio   2005\Projects\ExcelText\OperationOnExcel\OutputToExcel.cs	38	17	OperationOnExcel     
 请问Microsoft.Office.Interop.Excel这个程序集在哪里可以获得,或给出一个优美的解决方案,分数不是问题   o(∩_∩)o 
 请高手指教!
------解决方案--------------------记得以前做过一个并没有用到这个程序集啊,LZ是怎么做的?
------解决方案--------------------必须添加对程序集“Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”的引用
------解决方案--------------------http://blog.csdn.net/net_lover/archive/2007/07/23/1702797.aspx
------解决方案--------------------这是我做的从DataGrid() 导出Excel数据表的代码 你看看  也许有帮助   
 using Excel; //要引用 
 //写在事件中   
  #region 导出数据到Excel表 
             //建立Excel对象   
             Excel.Application app = new Excel.Application(); 
             try 
             { 
                 if (app == null) 
                 { 
                     MessageBox.Show( "对不起,您的电脑未安装Excel,请先安装后再进行操作! ",  "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); 
                 } 
                 app.Visible = isShowExcle; 
                 Workbooks workbooks = app.Workbooks; 
                 _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); 
                 Sheets sheets = workbook.Worksheets; 
                 _Worksheet worksheet = (_Worksheet)sheets.get_Item(1); 
                 if (worksheet == null) 
                 { 
                     return false; 
                 } 
                 string sLen =  " "; 
                 //取得最后一列列名 
                 char H = (char)(64 + DataGrid1.ColumnCount / 26); 
                 char L = (char)(64 + DataGrid1.ColumnCount % 26); 
                 if (DataGrid1.ColumnCount  < 26) 
                 { 
                     sLen = L.ToString(); 
                 } 
                 else 
                 { 
                     sLen = H.ToString() + L.ToString(); 
                 }     
                 //标题 
                 string sTmp = sLen +  "1 "; 
                 Range ranCaption = worksheet.get_Range(sTmp,  "A1 "); 
                 string[] asCaption = new string[DataGrid1.ColumnCount]; 
                 for (int i = 0; i  < DataGrid1.ColumnCount; i++) 
                 { 
                     asCaption[i] = DataGrid1.Columns[i].HeaderText; 
                 } 
                 ranCaption.Value2 = asCaption;   
                 //数据 
                 object[] obj = new object[DataGrid1.Columns.Count]; 
                 for (int r = 0; r  < DataGrid1.RowCount - 1; r++) 
                 { 
                     for (int l = 0; l  < DataGrid1.Columns.Count; l++) 
                     { 
                         if (DataGrid1[l, r].ValueType == typeof(DateTime)) 
                         { 
                             obj[l] = DataGrid1[l, r].Value.ToString(); 
                         } 
                         else 
                         { 
                             obj[l] = DataGrid1[l, r].Value; 
                         } 
                     } 
                     string cell1 = sLen + ((int)(r + 2)).ToStrin