C#中怎么使用NPOI读取excel转为DataSet
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍了C#中怎么使用NPOI读取excel转为DataSet的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中怎么使用NPOI读取excel转为DataSe
千家信息网最后更新 2026年11月04日C#中怎么使用NPOI读取excel转为DataSet
这篇文章主要介绍了C#中怎么使用NPOI读取excel转为DataSet的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中怎么使用NPOI读取excel转为DataSet文章都会有所收获,下面我们一起来看看吧。
NPOI读取excel转为DataSet
////// 读取Execl数据到DataTable(DataSet)中/// /// 指定Execl文件路径/// 设置第一行是否是列名///返回一个DataTable数据集 public static DataSet ExcelToDataSet(string filePath, bool isFirstLineColumnName) { DataSet dataSet = new DataSet(); int startRow = 0; try { using (FileStream fs = File.OpenRead(filePath)) { IWorkbook workbook = null; // 如果是2007+的Excel版本 if (filePath.IndexOf(".xlsx") > 0) { workbook = new XSSFWorkbook(fs); } // 如果是2003-的Excel版本 else if (filePath.IndexOf(".xls") > 0) { workbook = new HSSFWorkbook(fs); } if (workbook != null) { //循环读取Excel的每个sheet,每个sheet页都转换为一个DataTable,并放在DataSet中 for (int p = 0; p < workbook.NumberOfSheets; p++) { ISheet sheet = workbook.GetSheetAt(p); DataTable dataTable = new DataTable(); dataTable.TableName = sheet.SheetName; if (sheet != null) { int rowCount = sheet.LastRowNum;//获取总行数 if (rowCount > 0) { IRow firstRow = sheet.GetRow(0);//获取第一行 int cellCount = firstRow.LastCellNum;//获取总列数 //构建datatable的列 if (isFirstLineColumnName) { startRow = 1;//如果第一行是列名,则从第二行开始读取 for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { ICell cell = firstRow.GetCell(i); if (cell != null) { if (cell.StringCellValue != null) { DataColumn column = new DataColumn(cell.StringCellValue); dataTable.Columns.Add(column); } } } } else { for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { DataColumn column = new DataColumn("column" + (i + 1)); dataTable.Columns.Add(column); } } //填充行 for (int i = startRow; i <= rowCount; ++i) { IRow row = sheet.GetRow(i); if (row == null) continue; DataRow dataRow = dataTable.NewRow(); for (int j = row.FirstCellNum; j < cellCount; ++j) { ICell 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 == 22 || 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); } } } dataSet.Tables.Add(dataTable); } } } return dataSet; } catch (Exception ex) { var msg = ex.Message; return null; }}
Dataset 导出为Excel
////// 将DataTable(DataSet)导出到Execl文档/// /// 传入一个DataSet/// 导出路径(可以不加扩展名,不加默认为.xls)///返回一个Bool类型的值,表示是否导出成功 /// True表示导出成功,Flase表示导出失败public static bool DataTableToExcel(DataSet dataSet, string Outpath) { bool result = false; try { if (dataSet == null || dataSet.Tables == null || dataSet.Tables.Count == 0 || string.IsNullOrEmpty(Outpath)) throw new Exception("输入的DataSet或路径异常"); int sheetIndex = 0; //根据输出路径的扩展名判断workbook的实例类型 IWorkbook workbook = null; string pathExtensionName = Outpath.Trim().Substring(Outpath.Length - 5); if (pathExtensionName.Contains(".xlsx")) { workbook = new XSSFWorkbook(); } else if(pathExtensionName.Contains(".xls")) { workbook = new HSSFWorkbook(); } else { Outpath = Outpath.Trim() + ".xls"; workbook = new HSSFWorkbook(); } //将DataSet导出为Excel foreach (DataTable dt in dataSet.Tables) { sheetIndex++; if (dt != null && dt.Rows.Count > 0) { ISheet sheet = workbook.CreateSheet(string.IsNullOrEmpty(dt.TableName) ? ("sheet" + sheetIndex) : dt.TableName);//创建一个名称为Sheet0的表 int rowCount = dt.Rows.Count;//行数 int columnCount = dt.Columns.Count;//列数 //设置列头 IRow row = sheet.CreateRow(0);//excel第一行设为列头 for (int c = 0; c < columnCount; c++) { ICell cell = row.CreateCell(c); cell.SetCellValue(dt.Columns[c].ColumnName); } //设置每行每列的单元格, for (int i = 0; i < rowCount; i++) { row = sheet.CreateRow(i + 1); for (int j = 0; j < columnCount; j++) { ICell cell = row.CreateCell(j);//excel第二行开始写入数据 cell.SetCellValue(dt.Rows[i][j].ToString()); } } } } //向outPath输出数据 using (FileStream fs = File.OpenWrite(Outpath)) { workbook.Write(fs);//向打开的这个xls文件中写入数据 result = true; } return result; } catch (Exception ex) { return false; } } }
调用方法
DataSet set = ExcelHelper.ExcelToDataTable("test.xlsx", true);//Excel导入 bool b = ExcelHelper.DataTableToExcel(set, "test2.xlsx");//导出Excel关于"C#中怎么使用NPOI读取excel转为DataSet"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"C#中怎么使用NPOI读取excel转为DataSet"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
数据
C#
一行
路径
知识
成功
内容
扩展名
文件
版本
篇文章
类型
输出
价值
单元
名称
实例
操作简单
文档
文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州淘业互联网络科技
互联网佳科技有限公司
中关村互联网 科技集团
互联网科技活动banner
科技创新与互联网经济
互联网科技卖菜
网络科技有限互联网
科技服务与互联网
华中科技大学互联网
互联网金融科技平台
卓越科技互联网 招聘
丰台科技园 互联网公司
博兴的互联网电子科技公司
北京三清互联网科技
小米互联网科技园设置
允成互联网科技有限公司融资
互联网科技实习生岗位
互联网科技年终奖
湖北辰鑫科技互联网
版纳互联网科技选哪家
中智农互联网科技
中资互联网科技
合肥互联网科技公司
伴你行互联网科技有限公司
美国互联网前沿科技
互联网大会黑科技排名
互联网软件和科技
米聚互联网科技南京有限公司排面
智帮互联网科技公司最近动向
杭州融税互联网科技有限公司