排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
分类:
.NET
NPOI是一个优秀的操作excel的库,可以很方便的进行excel的读取与导出
NPOI读取excel
public ActionResult ReadExcel() { //打开excel所在的位置 FileStream stream = new FileStream(Server.MapPath("~/excel/students.xls"), FileMode.Open); //获取excel HSSFWorkbook workbook = new HSSFWorkbook(stream); //获取excel中的表 HSSFSheet sheet = workbook.GetSheet("Sheet1") as HSSFSheet; //获取行 HSSFRow row = sheet.GetRow(0) as HSSFRow; //获取列 HSSFCell cell = row.GetCell(0) as HSSFCell; string str = cell.StringCellValue; //遍历行 for (int i = 0; i < sheet.LastRowNum; i++) { HSSFRow itemrow = sheet.GetRow(i) as HSSFRow; string value = itemrow.GetCell(0).StringCellValue; Response.Write(value + "<br/>"); } return View(); }
封装一个方法根据字符串的方式来读取单元格的值
因为类型多了,读取很容易报错
/// <summary> /// 根据string类型来获取单元格的值 /// </summary> /// <param name="hSSFCell"></param> /// <returns></returns> private string GetStringCellValue(NPOI.SS.UserModel.ICell hSSFCell) { if (hSSFCell == null) { return ""; } if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Numeric) { // //NPOI中数字和日期都是NUMERIC类型的,这里对其进行判断是否是日期类型 if (NPOI.SS.UserModel.DateUtil.IsCellDateFormatted(hSSFCell)) { try { string dateTime = hSSFCell.DateCellValue.ToString(); return dateTime; } catch { /* * 很奇怪读取时不时会报错。 * 如果报错就使用数字类型读取然后使用GetJavaDate把数字转化成日期 */ DateTime dateTime = NPOI.SS.UserModel.DateUtil.GetJavaDate(hSSFCell.NumericCellValue); } } return hSSFCell.NumericCellValue.ToString(); } if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.String) { return hSSFCell.StringCellValue; } if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Boolean) { return hSSFCell.BooleanCellValue.ToString(); } if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Blank) { return ""; } if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Error) { return hSSFCell.ErrorCellValue.ToString(); } return ""; }
也可以按照泛型的类型来封装
注意通过这种方式,类型要能转化成功才行,不然会报类型转化的错误的
/// <summary> /// 根据传递过来的泛型来获取对应的类型数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="hSSFCell"></param> /// <returns></returns> private T GetCellValue<T>(NPOI.SS.UserModel.ICell hSSFCell) { Type t = typeof(T); if (hSSFCell == null) { return default(T); } if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Numeric) { // //NPOI中数字和日期都是NUMERIC类型的,这里对其进行判断是否是日期类型 if (NPOI.SS.UserModel.DateUtil.IsCellDateFormatted(hSSFCell)) { return (T)(object)hSSFCell.DateCellValue; } return (T)(object)hSSFCell.NumericCellValue; } if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.String) { return (T)(object)hSSFCell.StringCellValue; } if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Boolean) { return (T)(object)hSSFCell.BooleanCellValue; } if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Blank) { return default(T); } if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Error) { return (T)(object)hSSFCell.ErrorCellValue; } return default(T); }
欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739
评价