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

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

9074人阅读 2019/1/25 23:18 总访问:5408208 评论: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)

评价

NPOI操作excel 2007/2010版本

HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xlsXSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx先...

NPOI导出excel根据模板导出Excel

使用NPOI导出excel///&lt;summary&gt; ///导出excel(下载excel) ///&lt;/summary&gt; publicvoidToExcel() { HSSFWo...

使用NPOI导出excel(包括图片)

Excl模板导出相信我们都会,那么模板上要导出图片呢?嗯~还是来个例子:准备工作:首先要引用NPOI包:然后获取数据集(我这...

使用NPOI插件读取Excel数据

方法步奏: 1.导入NPOI插件和文件IO 2.获取文件路径 3.打开文件 4.通过文件夹打开表格 ...

C使用NPOI导出 (Execl.xls)类型文件(一)

公司业务一直处于表格居多的情况于是,导出成了常态,今天记录一下导出方法(前几天还说要合并行什么的太难了)1,需自行到...

NPOI对Excel的读取

publicActionResultIndex() { //打开excel所在的位置 FileStreamstream=newFileStream(Server.MapPath(&quot;~/Content/...

NPOI导入万行excel优化

如果数据量比较大,导入excel会很慢,可以使用导入csv文件,这样效率就会快很多了

NPOI导出excel

show your code:publicActionResultOutPutExcel() { //在内存中构建一个excel HSSFWorkbookworkbook=newHSSFWorkbook();...

Docker下配置.NET Core NPOI 环境

Docker下配置.NET Core NPOI 环境[TOC] 问题原因在通过NPOI在linux环境下进行打包时会出现环境问题。[[NPOI ERROR]]:The t...

NPOI操作excel报错:ICSharpCode.SharpZipLib.Zip.ZipException:“Wrong Local header signature

读取的版本与使用的方法不匹配造成的HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xlsXSSFWorkbook:是操...

使用OLEDB读取不同版本Excel的连接字符串设置

使用OleBD读取excel的时候,excel不同的版本,连接字符串的写法也会不一样。///&lt;summary&gt; ///读取excel ///&lt;/su...

数据读取器与指定的"xx"不兼容某个类型为"xx"的成员在同名的数据读取器中没有对应的列

报错的地方var result= _db.Database.SqlQuery&lt;SMachine&gt;(sql).FirstOrDefault();经过分析,是因为SqlQuery方法查询...

C网络流读取(图片)

stringurl=&quot;....&quot;; Streamstream=WebRequest.Create(url).GetResponse().GetResponseStream(); constintbuffer...

C 读取硬盘信息 ManagementClass类

标签:roc图片dapemd编号openthread文件需要一、在很多情况下,你可能都需要得到微机的硬件信息。需要加上下面的这句话:us...

XDocument创建XML文件和读取文件

创建根节点创建父节点创建子节点范例: //获取根节点对象 XDocument document = new XDocument(); //创建根节点下的...