调用Microsoft.Office.Interop.Excel组件打开excel文档 可以计算工作表的个数并取出各工作表的名称,这样遍历各工作表就可以查询出所有的数据了 代码如下://需引用Interop.Microsoft.Office.Interop.Excel.dll  Microsoft.Office.Interop.Excel 即COM组件 Microsoft Excel XX.0 Object Library

 

 
  
  1. using Excel = Microsoft.Office.Interop.Excel; //需引用Interop.Microsoft.Office.Interop.Excel.dll 
  2.  
  3. Excel.Application xlApp = new Excel.Application(); ;  
  4.         Excel.Workbook workbook = xlApp.Workbooks.Open(serverpath, 0, false, 5, """"false, Excel.XlPlatform.xlWindows, ""truefalse, 0, true, 1, 0);  
  5.         int n = workbook.Worksheets.Count;  
  6.         string[] sheetSet = new string[n];  
  7.         ArrayList al = new ArrayList();  
  8.         for (int i = 0; i < n; i++)  
  9.         {  
  10.             sheetSet[i] = ((Excel.Worksheet)workbook.Worksheets[i + 1]).Name;  
  11.         }  
  12.         xlApp.Workbooks.Close();//关闭打开的文档 否则学号会显示科学计数法。  
  13.  

以上代码计算出了工作表个数 并将名称存入数组sheetSet。特别注意的是  文档关闭方法必须在select之前关闭xlApp.Workbooks.Close();  否则的话 就会产生一些单元格格式的问题。比如长数字会变成科学计数法显示。

遍历数据 就OK

 

 
  
  1. DataSet ds = new DataSet();  
  2.         for (int i = 0; i < n; i++)  
  3.         {  
  4.             ds.Tables.Add();  
  5.             strSql = "select * from [" + sheetSet[i]+"$]";  
  6.             //  
  7.             // TODO: 在此处添加构造函数逻辑  
  8.             //              
  9.             string strConn = sqlconn(serverpath);  
  10.             OleDbConnection myConnection = new OleDbConnection(strConn);  
  11.             myConnection.Open();  
  12.             OleDbDataAdapter da = new OleDbDataAdapter(strSql, myConnection);  
  13.             try 
  14.             {  
  15.                 da.Fill(ds.Tables[i]);  
  16.             }  
  17.             catch (Exception)  
  18.             {  
  19.                 throw;  
  20.             }  
  21.             finally 
  22.             {  
  23.             }  
  24.                 if (i == n - 1)  
  25.                 {  
  26.                     da.Dispose();  
  27.                     da = null;  
  28.                     myConnection.Close();  
  29.                     myConnection = null;  
  30.                 }  
  31.         } 

以上返回ds 包含多个工作表的数据

遍历ds的tables就可以取出各工作表的数据了。