C#中怎么使用NPOI读取excel转为DataSet
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇文章主要介绍了C#中怎么使用NPOI读取excel转为DataSet的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中怎么使用NPOI读取excel转为DataSe
千家信息网最后更新 2025年02月06日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安全错误
数据库的锁怎样保障安全
证券数据库哪里下载
软件开发人员派遣排行榜
康康在线代理服务器
json数据库是数据库吗
ssh怎么和数据库关联
榆树先进网络技术诚信合作
网络安全和维护工程师
软件开发技术更新有多快
华为的网络安全产品信息
东莞拼团软件开发中心
php+mysql软件开发
怎么看服务器是千兆还是万兆
个人软件开发者
sql显示时间在数据库中
软件开发角色英语怎么说
江西服务器机柜厂家供应云空间
软件开发ccb什么意思
昆明智能化软件开发特价
linux服务器管理公司的
网络安全年度投入
网络安全审查办公室社在哪
百威网络技术
华为服务器管理口如何配置
软件开发项目成本度量必要性
百万赢家软件开发
部队需要软件开发
制造业+软件开发
sql添加服务器
腾讯云服务器视频播放
石家庄高新区网络安全大队