这里只写MVC下的情况
???????public ActionResult Index() ???????{ ???????????var path = Server.MapPath(@"/content/user.xlsx"); ?????????var dt= ?ExcelToDataTable(true, path); ?????????List<User> list = new List<User>(); ?????????foreach (DataRow item in dt.Rows) ?????????{ ?????????????list.Add(new User(){ ?????????????????No=Convert.ToInt32( item[0]), ?????????????????Name= item[1].ToString(), ?????????????????Age=Convert.ToInt32(item[2]), ?????????????????Sex=item[3].ToString() ?????????????}); ?????????} ???????????return View(list); ???????} ???????/// <summary> ???????/// 将excel中的数据导入到DataTable中 ???????/// </summary> ???????/// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param> ???????/// <param name="fileName">文件路径</param> ???????/// <returns>返回的DataTable</returns> ???????public static DataTable ExcelToDataTable( bool isFirstRowColumn, string fileName) ???????{ ???????????????????????if (string.IsNullOrEmpty(fileName)) ???????????{ ???????????????throw new ArgumentNullException(fileName); ???????????} ???????????var data = new DataTable(); ???????????IWorkbook workbook = null; ???????????FileStream fs = null; ???????????try ???????????{ ???????????????fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); ???????????????if (fileName.IndexOf(".xlsx", StringComparison.Ordinal) > 0) ???????????????{ ???????????????????workbook = new XSSFWorkbook(fs); ???????????????} ???????????????else if (fileName.IndexOf(".xls", StringComparison.Ordinal) > 0) ???????????????{ ???????????????????workbook = new HSSFWorkbook(fs); ???????????????} ???????????????ISheet sheet = null; ???????????????if (workbook != null) ???????????????{ ???????????????????//获取第一个sheet ???????????????????sheet = workbook.GetSheetAt(0); ???????????????} ???????????????if (sheet == null) return data; ???????????????var firstRow = sheet.GetRow(0); ???????????????//一行最后一个cell的编号 即总的列数 ???????????????int cellCount = firstRow.LastCellNum; ???????????????int startRow; ???????????????if (isFirstRowColumn) ???????????????{ ???????????????????for (int i = firstRow.FirstCellNum; i < cellCount; ++i) ???????????????????{ ???????????????????????var cell = firstRow.GetCell(i); ???????????????????????var cellValue = cell.StringCellValue; ???????????????????????if (cellValue == null) continue; ???????????????????????var column = new DataColumn(cellValue); ???????????????????????data.Columns.Add(column); ???????????????????} ???????????????????startRow = sheet.FirstRowNum + 1; ???????????????} ???????????????else ???????????????{ ???????????????????startRow = sheet.FirstRowNum; ???????????????} ???????????????//最后一列的标号 ???????????????var rowCount = sheet.LastRowNum; ???????????????for (var i = startRow; i <= rowCount; ++i) ???????????????{ ???????????????????var row = sheet.GetRow(i); ???????????????????//没有数据的行默认是null ???????????????????if (row == null) continue; ???????????????????var dataRow = data.NewRow(); ???????????????????for (int j = row.FirstCellNum; j < cellCount; ++j) ???????????????????{ ???????????????????????//同理,没有数据的单元格都默认是null ???????????????????????if (row.GetCell(j) != null) ???????????????????????????dataRow[j] = row.GetCell(j).ToString(); ???????????????????} ???????????????????data.Rows.Add(dataRow); ???????????????} ???????????????return data; ???????????} ???????????catch (IOException ioex) ???????????{ ???????????????throw new IOException(ioex.Message); ???????????} ???????????catch (Exception ex) ???????????{ ???????????????throw new Exception(ex.Message); ???????????} ???????????finally ???????????{ ???????????????if (fs != null) ???????????????{ ???????????????????fs.Close(); ???????????????} ???????????} ???????} ???
.net下使用NPOI读取Excel表数据
原文地址:http://www.cnblogs.com/lunawzh/p/7906473.html