调用Microsoft.Office.Interop.Excel组件打开excel文档 可以计算工作表的个数并取出各工作表的名称,这样遍历各工作表就可以查询出所有的数据了 代码如下://需引用Interop.Microsoft.Office.Interop.Excel.dll Microsoft.Office.Interop.Excel 即COM组件 Microsoft Excel XX.0 Object Library
- using Excel = Microsoft.Office.Interop.Excel; //需引用Interop.Microsoft.Office.Interop.Excel.dll
- Excel.Application xlApp = new Excel.Application(); ;
- Excel.Workbook workbook = xlApp.Workbooks.Open(serverpath, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, 1, 0);
- int n = workbook.Worksheets.Count;
- string[] sheetSet = new string[n];
- ArrayList al = new ArrayList();
- for (int i = 0; i < n; i++)
- {
- sheetSet[i] = ((Excel.Worksheet)workbook.Worksheets[i + 1]).Name;
- }
- xlApp.Workbooks.Close();//关闭打开的文档 否则学号会显示科学计数法。
以上代码计算出了工作表个数 并将名称存入数组sheetSet。特别注意的是 文档关闭方法必须在select之前关闭xlApp.Workbooks.Close(); 否则的话 就会产生一些单元格格式的问题。比如长数字会变成科学计数法显示。
遍历数据 就OK
- DataSet ds = new DataSet();
- for (int i = 0; i < n; i++)
- {
- ds.Tables.Add();
- strSql = "select * from [" + sheetSet[i]+"$]";
- //
- // TODO: 在此处添加构造函数逻辑
- //
- string strConn = sqlconn(serverpath);
- OleDbConnection myConnection = new OleDbConnection(strConn);
- myConnection.Open();
- OleDbDataAdapter da = new OleDbDataAdapter(strSql, myConnection);
- try
- {
- da.Fill(ds.Tables[i]);
- }
- catch (Exception)
- {
- throw;
- }
- finally
- {
- }
- if (i == n - 1)
- {
- da.Dispose();
- da = null;
- myConnection.Close();
- myConnection = null;
- }
- }
以上返回ds 包含多个工作表的数据
遍历ds的tables就可以取出各工作表的数据了。
转载于:https://blog.51cto.com/2510495/1077984