由于之前在网上查阅一些资料发现总是不能编译通过,不能正常使用,现把能正常使用的代码贴出:

  1. /// <summary>
  2. /// Excel导入帮助类
  3. /// </summary>
  4. public class ImportExcelUtil<T> where T : new()
  5. {
  6. //合法文件扩展名
  7. private static List<string> extName = new List<string>() { ".xls", ".xlsx" };
  8. /// <summary>
  9. /// 导入Excel内容读取到List<T>中
  10. /// </summary>
  11. /// <param name="file">导入Execl文件</param>
  12. /// <param name="sheetName">指定读取excel工作薄sheet的名称</param>
  13. /// <returns>List<T></returns>
  14. public static List<T> InputExcel(IFormFile file, string sheetName = null)
  15. {
  16. //获取文件后缀名
  17. string type = Path.GetExtension(file.FileName);
  18. //判断是否导入合法文件
  19. if(!extName.Contains(type))
  20. {
  21. return null;
  22. }
  23. //转成为文件流
  24. MemoryStream ms = new MemoryStream();
  25. file.CopyTo(ms);
  26. ms.Seek(, SeekOrigin.Begin);
  27. //实例化T数组
  28. List<T> list = new List<T>();
  29. //获取数据
  30. list = InputExcel(ms, sheetName);
  31. return list;
  32. }
  33.  
  34. /// <summary>
  35. /// 将Excel文件内容读取到List<T>中
  36. /// </summary>
  37. /// <param name="fileName">文件完整路径名</param>
  38. /// <param name="sheetName">指定读取excel工作薄sheet的名称</param>
  39. /// <param name="isFirstRowColumn">第一行是否是DataTable的列名:true=是,false=否</param>
  40. /// <returns>List<T></returns>
  41. public static List<T> InputExcel(string fileName, string sheetName = null)
  42. {
  43. if (!File.Exists(fileName))
  44. {
  45. return null;
  46. }
  47. //根据指定路径读取文件
  48. FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
  49. //实例化T数组
  50. List<T> list = new List<T>();
  51. //获取数据
  52. list = InputExcel(fs, sheetName);
  53.  
  54. return list;
  55. }
  56.  
  57. /// <summary>
  58. /// 将Excel文件内容读取到List<T>中
  59. /// </summary>
  60. /// <param name="fileStream">文件流</param>
  61. /// <param name="sheetName">指定读取excel工作薄sheet的名称</param>
  62. /// <returns>List<T></returns>
  63. private static List<T> InputExcel(Stream fileStream, string sheetName = null)
  64. {
  65. //创建Excel数据结构
  66. IWorkbook workbook = WorkbookFactory.Create(fileStream);
  67. //如果有指定工作表名称
  68. ISheet sheet = null;
  69. if (!string.IsNullOrEmpty(sheetName))
  70. {
  71. sheet = workbook.GetSheet(sheetName);
  72. //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet
  73. if (sheet == null)
  74. {
  75. sheet = workbook.GetSheetAt();
  76. }
  77. }
  78. else
  79. {
  80. //如果没有指定的sheetName,则尝试获取第一个sheet
  81. sheet = workbook.GetSheetAt();
  82. }
  83. //实例化T数组
  84. List<T> list = new List<T>();
  85. if (sheet != null)
  86. {
  87. //一行最后一个cell的编号 即总的列数
  88. IRow cellNum = sheet.GetRow();
  89. int num = cellNum.LastCellNum;
  90. //获取泛型对象T的所有属性
  91. var propertys = typeof(T).GetProperties();
  92. //每行转换为单个T对象
  93. for (int i = ; i <= sheet.LastRowNum; i++)
  94. {
  95. IRow row = sheet.GetRow(i);
  96. var obj = new T();
  97. for (int j = ; j < num; j++)
  98. {
  99. //没有数据的单元格都默认是null
  100. ICell cell = row.GetCell(j);
  101. if (cell != null)
  102. {
  103. var value = row.GetCell(j).ToString();
  104. string str = (propertys[j].PropertyType).FullName;
  105. if (str == "System.String")
  106. {
  107. propertys[j].SetValue(obj, value, null);
  108. }
  109. else if (str == "System.DateTime")
  110. {
  111. DateTime pdt = Convert.ToDateTime(value, CultureInfo.InvariantCulture);
  112. propertys[j].SetValue(obj, pdt, null);
  113. }
  114. else if (str == "System.Boolean")
  115. {
  116. bool pb = Convert.ToBoolean(value);
  117. propertys[j].SetValue(obj, pb, null);
  118. }
  119. else if (str == "System.Int16")
  120. {
  121. short pi16 = Convert.ToInt16(value);
  122. propertys[j].SetValue(obj, pi16, null);
  123. }
  124. else if (str == "System.Int32")
  125. {
  126. int pi32 = Convert.ToInt32(value);
  127. propertys[j].SetValue(obj, pi32, null);
  128. }
  129. else if (str == "System.Int64")
  130. {
  131. long pi64 = Convert.ToInt64(value);
  132. propertys[j].SetValue(obj, pi64, null);
  133. }
  134. else if (str == "System.Byte")
  135. {
  136. byte pb = Convert.ToByte(value);
  137. propertys[j].SetValue(obj, pb, null);
  138. }
  139. else
  140. {
  141. propertys[j].SetValue(obj, null, null);
  142. }
  143. }
  144. }
  145. list.Add(obj);
  146. }
  147. }
  148. return list;
  149. }
  150.  
  151. }

如使用有问题,请留言。希望能帮到你~~~

.Net Core 使用 NPOI 导入Excel的更多相关文章

  1. ASP.NET MVC NPOI导入Excel DataTable批量导入到数据库

    使用NPOI导入Excel 首先在MVC项目中导入NPOI 查询NPOI安装,排序依据,选择:最高下载量,选择第一个. 在控制器中创建ExcelController 在Index视图中写入代码: @u ...

  2. 使用NPOI导入Excel注意日期格式和数字格式

    //使用NPOI导入Excel public static DataTable importExcelToDataSetUsingNPOI(string FilePath, string fileNa ...

  3. 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)

    并发编程概述   前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...

  4. 使用npoi导入Excel - 带合并单元格--附代码

    之前我们在使用npoi导入excel表格的时候,往往会遇见那种带有合并单元格的数据在导入的时候出现合并为空的问题, 也就是只有第一条有数据,其余均为空白.在网上翻了半天也没有找到合适的解决方案,最后还 ...

  5. NPOI 导入Excel和读取Excel

    1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...

  6. NPOI导入excel为datatable (xls xlsx xlsm)

    使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中 http://www.cnblogs.com/songrun/p/3547738.html NPOI 2.0教程 – 自动 ...

  7. NPOI导入excel

    1.引用NPOI: using NPOI.HSSF.UserModel;using NPOI.HSSF.Util;using NPOI.SS.UserModel; 2.导出excel 1 privat ...

  8. .NET Core 使用NPOI读取Excel返回泛型List集合

    我是一名 ASP.NET 程序员,专注于 B/S 项目开发.累计文章阅读量超过一千万,我的博客主页地址:https://www.itsvse.com/blog_xzz.html 网上有很多关于npoi ...

  9. .net core 基于NPOI 的excel导入导出类,支持自定义导出哪些字段,和判断导入是否有失败的记录

    #region 从Excel导入 //用法 //var cellHeader = new Dictionary<string, string>(); //cellHeader.Add(&q ...

随机推荐

  1. CF832D Misha, Grisha and Underground

    有一棵n个节点的树,一共q 次询问 每次询问给定3个点,求两条起点终点在这三个点上且不完全重合的路径的最多公共节点数 简单LCA求距离,令a为汇合点,那么答案就是(dis(a,b) + dis(a,c ...

  2. “Unknown class XXViewController in Interface Builder file.”问题处理

    在静态库中写了一个XXViewController类,然后在主工程的xib中,将xib的类指定为XXViewController,程序运行时,报了如下错误: “Unknown class XXView ...

  3. Selenium之编辑框操作

    编辑框操作: 网页上随处可见的编辑框,有时候编辑框里有默认的提示文字或者当我们需要输入第二次测试数据时,须先用clear()方法清除该元素里的字符串,再输入文本: 那么如何获取输入框已经输入的文本内容 ...

  4. 《java面试十八式》--引子

    爪哇城中   “喂,你等等我啊”少女气喘吁吁的喊道   “大小姐,你可快点吧,报名马上就要结束了.”   这是爪哇城一年一度的大选比赛,被选上的人会留下来任职,享有名誉和金钱,所以大家都在积极准备. ...

  5. 基于JavaScript google map集成流程

    google地图集成流程 一.获取Google Map API密钥 1.进入Google官网 => https://www.google.com.hk/ ,申请一个谷歌账号(如果没有)然后访问下 ...

  6. quick start guide for XMEGA ADC

    This is the quick start guide for the Analog to Digital Converter (ADC), with step-by-step instructi ...

  7. poj 2631 Roads in the North (自由树的直径)

    Roads in the North Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4513   Accepted: 215 ...

  8. ubuntu19_nginx_uwsgi_flask_apt安装

    ubuntu19_nginx_uwsgi_flask_apt安装 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-12-21. 在 ubuntu 19.04 apt 安装 apt i ...

  9. Docker常用命令-全

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接: https://app.yinxiang.com/shard/s17/nl/19391737/9f6bf39e- ...

  10. 设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(2.Azure Functions实战)

    本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品. 主要实战的内容为: 将设备遥测数据上传到物联网中心, 将遥测数 ...