应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

NPOI读取excel。excel 导入。日期类型读取

8812人阅读 2019/1/25 23:18 总访问:5181909 评论:0 收藏:0 手机
分类: .NET


NPOI是一个优秀的操作excel的库,可以很方便的进行excel的读取与导出


NPOI读取excel

  1.         public ActionResult ReadExcel()
  2.         {
  3.             //打开excel所在的位置
  4.             FileStream stream = new FileStream(Server.MapPath("~/excel/students.xls"), FileMode.Open);
  5.             //获取excel
  6.             HSSFWorkbook workbook = new HSSFWorkbook(stream);
  7.             //获取excel中的表
  8.             HSSFSheet sheet = workbook.GetSheet("Sheet1"as HSSFSheet;
  9.             //获取行
  10.             HSSFRow row = sheet.GetRow(0as HSSFRow;
  11.             //获取列
  12.             HSSFCell cell = row.GetCell(0as HSSFCell;
  13.             string str = cell.StringCellValue;
  14.             //遍历行
  15.             for (int i = 0; i < sheet.LastRowNum; i++)
  16.             {
  17.                 HSSFRow itemrow = sheet.GetRow(i) as HSSFRow;
  18.                 string value = itemrow.GetCell(0).StringCellValue;
  19.                 Response.Write(value + "<br/>");
  20.             }
  21.             return View();
  22.         }


封装一个方法根据字符串的方式来读取单元格的值
因为类型多了,读取很容易报错

  1. /// <summary>
  2. /// 根据string类型来获取单元格的值
  3. /// </summary>
  4. /// <param name="hSSFCell"></param>
  5. /// <returns></returns>
  6. private string GetStringCellValue(NPOI.SS.UserModel.ICell hSSFCell)
  7. {
  8.     if (hSSFCell == null)
  9.     {
  10.         return "";
  11.     }
  12.     if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Numeric)
  13.     {
  14.         // //NPOI中数字和日期都是NUMERIC类型的,这里对其进行判断是否是日期类型
  15.         if (NPOI.SS.UserModel.DateUtil.IsCellDateFormatted(hSSFCell))
  16.         {
  17.             try
  18.             {
  19.                 string dateTime = hSSFCell.DateCellValue.ToString();
  20.                 return dateTime;
  21.             }
  22.             catch
  23.             {
  24.                 /*
  25.                     * 很奇怪读取时不时会报错。
  26.                     * 如果报错就使用数字类型读取然后使用GetJavaDate把数字转化成日期
  27.                     */
  28.                 DateTime dateTime = NPOI.SS.UserModel.DateUtil.GetJavaDate(hSSFCell.NumericCellValue);
  29.             }
  30.         }
  31.         return hSSFCell.NumericCellValue.ToString();
  32.     }
  33.     if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.String)
  34.     {
  35.         return hSSFCell.StringCellValue;
  36.     }
  37.     if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Boolean)
  38.     {
  39.         return hSSFCell.BooleanCellValue.ToString();
  40.     }
  41.     if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Blank)
  42.     {
  43.         return "";
  44.     }
  45.     if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Error)
  46.     {
  47.         return hSSFCell.ErrorCellValue.ToString();
  48.     }
  49.     return "";
  50. }


也可以按照泛型的类型来封装
注意通过这种方式,类型要能转化成功才行,不然会报类型转化的错误的

  1. /// <summary>
  2. /// 根据传递过来的泛型来获取对应的类型数据
  3. /// </summary>
  4. /// <typeparam name="T"></typeparam>
  5. /// <param name="hSSFCell"></param>
  6. /// <returns></returns>
  7. private T GetCellValue<T>(NPOI.SS.UserModel.ICell hSSFCell)
  8. {
  9.     Type t = typeof(T);
  10.     if (hSSFCell == null)
  11.     {
  12.         return default(T);
  13.     }
  14.     if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Numeric)
  15.     {
  16.         // //NPOI中数字和日期都是NUMERIC类型的,这里对其进行判断是否是日期类型
  17.         if (NPOI.SS.UserModel.DateUtil.IsCellDateFormatted(hSSFCell))
  18.         {
  19.             return (T)(object)hSSFCell.DateCellValue;
  20.         }
  21.         return (T)(object)hSSFCell.NumericCellValue;
  22.     }
  23.     if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.String)
  24.     {
  25.         return (T)(object)hSSFCell.StringCellValue;
  26.     }
  27.     if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Boolean)
  28.     {
  29.         return (T)(object)hSSFCell.BooleanCellValue;
  30.     }
  31.     if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Blank)
  32.     {
  33.         return default(T);
  34.     }
  35.     if (hSSFCell.CellType == NPOI.SS.UserModel.CellType.Error)
  36.     {
  37.         return (T)(object)hSSFCell.ErrorCellValue;
  38.     }
  39.     return default(T);
  40. }


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价