c#NPOI读取excel 比interop和Microsoft.Jet.OLEDB.4.0 之类 的好的多
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#NPOI读取excel 比interop和Microsoft.Jet.OLEDB.4.0 之类 的好的多,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2888字,纯文字阅读大概需要5分钟。
内容图文
![c#NPOI读取excel 比interop和Microsoft.Jet.OLEDB.4.0 之类 的好的多](/upload/InfoBanner/zyjiaocheng/1237/250ac63931dd4101b9ab4651f3b1e354.jpg)
今天下午开始整理excel这块, 微软弄的那些库简直是个坑, 什么com注册之类的净是些报错.
在网上搜资料偶然碰见npoi ,好东西,值得使用
using System; using System.Data; using System.IO; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using NPOI.HSSF.UserModel; namespace MakeData { public class ReadExcelHelper { /// <summary> /// 将excel导入到datatable /// </summary> /// <param name="filePath"> excel路径 </param> /// <param name="isColumnName"> 第一行是否是列名 </param> /// <returns> 返回datatable </returns> public static DataTable ExcelToDataTable(string filePath, bool isColumnName) { DataTable dataTable = null; FileStream fs = null; DataColumn column = null; DataRow dataRow = null; IWorkbook workbook = null; ISheet sheet = null; IRow row = null; ICell cell = null; int startRow = 0; try { using (fs = File.OpenRead(filePath)) { // 2007版本if (filePath.IndexOf(".xlsx") > 0) workbook = new XSSFWorkbook(fs); // 2003版本elseif (filePath.IndexOf(".xls") > 0) workbook = new HSSFWorkbook(fs); if (workbook != null) { sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet dataTable = new DataTable(); if (sheet != null) { int rowCount = sheet.LastRowNum;//总行数if (rowCount > 0) { IRow firstRow = sheet.GetRow(0);//第一行int cellCount = firstRow.LastCellNum;//列数 //构建datatable的列if (isColumnName) { startRow = 1;//如果第一行是列名,则从第二行开始读取for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { cell = firstRow.GetCell(i); if (cell != null) { if (cell.StringCellValue != null) { column = new DataColumn(cell.StringCellValue); dataTable.Columns.Add(column); } } } } else { for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { column = new DataColumn("column" + (i + 1)); dataTable.Columns.Add(column); } } //填充行for (int i = startRow; i <= rowCount; ++i) { row = sheet.GetRow(i); if (row == null) continue; dataRow = dataTable.NewRow(); for (int j = row.FirstCellNum; j < cellCount; ++j) { cell = row.GetCell(j); if (cell == null) { dataRow[j] = ""; } else { //CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)switch (cell.CellType) { case CellType.Blank: dataRow[j] = ""; break; case CellType.Numeric: short format = cell.CellStyle.DataFormat; //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理if (format == 14 || format == 31 || format == 57 || format == 58) dataRow[j] = cell.DateCellValue; else dataRow[j] = cell.NumericCellValue; break; case CellType.String: dataRow[j] = cell.StringCellValue; break; } } } dataTable.Rows.Add(dataRow); } } } } } return dataTable; } catch (Exception ex) { string mess = ex.Message; if (fs != null) { fs.Close(); } returnnull; } } } }
原文:https://www.cnblogs.com/zuochanzi/p/9058568.html
内容总结
以上是互联网集市为您收集整理的c#NPOI读取excel 比interop和Microsoft.Jet.OLEDB.4.0 之类 的好的多全部内容,希望文章能够帮你解决c#NPOI读取excel 比interop和Microsoft.Jet.OLEDB.4.0 之类 的好的多所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。