第一种方法:传统方法,采用OleDB读取EXCEL文件,
优点:写法简单,缺点:服务器必须安有此组件才能用,不推荐使用
private DataSet GetConnect_DataSet2(string fileName) { DataSet myDataSet = new DataSet(); //创建一个数据链接 string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + fileName + ";Extended Properties=Excel 8.0"; OleDbConnection myConn = new OleDbConnection(strCon); string strCom = " SELECT * FROM [Sheet1$] "; //try //{ myConn.Open(); //打开数据链接,得到一个数据集 OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn); //创建一个 DataSet对象 myDataSet = new DataSet(); //得到自己的DataSet对象 myCommand.Fill(myDataSet, "CodeTable"); //关闭此数据链接 myConn.Close(); //} //catch (Exception ex) //{ //} return myDataSet; }
第二种方法:用第三方组件:NPOI组件,推荐使用此方法
先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用。
NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。
使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。
NPOI采用的是Apache 2.0许可证(poi也是采用这个许可证),这意味着它可以被用于任何商业或非商业项目,你不用担心因为使用它而必须开放你自己的源代码,所以它对于很多从事业务系统开发的公司来说绝对是很不错的选择。
当然作为一个开源许可证,肯定也是有一些义务的,例如如果你在系统中使用NPOI,你必须保留NPOI中的所有声明信息。对于源代码的任何修改,必须做出明确的标识。
//config中配置的上传的Excel路径 static object basePath = ConfigurationManager.AppSettings["FilePath"]; #region 读取Excel文件 /// <summary> /// 读取Excel文件到table中 /// </summary> /// <param name="filePath">excel文件路径</param> /// <returns></returns> public static DataTable ReadExcel(string fileName) { DataTable dt = new DataTable(); string filePath = ""; if (basePath != null) { filePath = HostingEnvironment.MapPath((basePath.ToString() + fileName)); dt = ImportExcelFile(filePath); } //文件是否存在 if (System.IO.File.Exists(filePath)) { } return dt; } public static DataTable ImportExcelFile(string filePath) { HSSFWorkbook hssfworkbook; #region//初始化信息 try { using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { hssfworkbook = new HSSFWorkbook(file); } } catch (Exception e) { throw e; } #endregion NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt(0); System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); DataTable dt = new DataTable(); rows.MoveNext(); HSSFRow row = (HSSFRow)rows.Current; for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++) { //dt.Columns.Add(Convert.ToChar(((int)‘A‘) + j).ToString()); //将第一列作为列表头 dt.Columns.Add(row.GetCell(j).ToString ()); } while (rows.MoveNext()) { row = (HSSFRow)rows.Current; DataRow dr = dt.NewRow(); for (int i = 0; i < row.LastCellNum; i++) { NPOI.SS.UserModel.ICell cell = row.GetCell(i); if (cell == null) { dr[i] = null; } else { dr[i] = cell.ToString(); } } dt.Rows.Add(dr); } return dt; } #endregion