C# .NET8使用NPOI导出数据到Excel文件
C# .NET8使用NPOI导出数据到Excel文件
网上找的C#例子,改良后分享给大家。 NPOIExportExcel 工具类 C# Code: /// <summary> /// NPOI导出数据到Excel文件 /// </summary> /// <typeparam name="T"></typeparam> public class NPOIExportExcel<T> where T : class { private readonly string _savePath; private readonly bool _firstRowIsHeader; private readonly List<T> _list; private readonly ISheet _sheet; private readonly IWorkbook _workbook; private readonly List<Action<T, ICell>> _actions = new List<Action<T, ICell>>(); /// <summary> /// NPOI工具构造器 /// </summary> /// <param name="list">数据源</param> /// <param name="excelfile">导出的excel文件</param> /// <param name="firstRowIsHeader">首行是标题行</param> public NPOIExportExcel(List<T> list, string excelfile, bool firstRowIsHeader) { _firstRowIsHeader = firstRowIsHeader; _savePath = excelfile; _list = list; if (_list == null || _list.Count == 0) { throw new Exception("导出数据不能为空"); } var file = new FileStream(_savePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); string fileExt = Path.GetExtension(excelfile).ToLower(); //XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式 if (fileExt == ".xlsx") { _workbook = new XSSFWorkbook(file); } else if (fileExt == ".xls") { _workbook = new HSSFWorkbook(file); } else { throw new Exception("不支持的文件格式"); } _sheet = _workbook.GetSheetAt(0); } /// <summary> /// 添加列的取值逻辑及数据类型 /// </summary> /// <param name="func">取值逻辑</param> /// <returns></returns> public NPOIExportExcel<T> AddField(Func<T, object> func, Type dataType) { _actions.Add((item, cell) => { //取字段的值 var o = func(item); if (o != null) { var value = System.ComponentModel.TypeDescriptor.GetConverter(dataType).ConvertFromString(o.ToString()); //SetCellValue方法仅支持的值类型 if (false) { } else if (dataType == typeof(System.String)) cell.SetCellValue((String)value); else if (dataType == typeof(Boolean)) cell.SetCellValue((Boolean)value); else if (dataType == typeof(DateTime)) cell.SetCellValue((DateTime)value); else if (dataType == typeof(Double)) cell.SetCellValue((Double)value); } else { cell.SetCellValue(String.Empty); } }); return this; } /// <summary> /// 保存Excel /// </summary> public int Save() { int rowIndex = _firstRowIsHeader ? 1 : 0; //因为第一行是表头,特殊表头需要单独处理 foreach (var item in _list) { IRow row = _sheet.GetRow(rowIndex) ?? _sheet.CreateRow(rowIndex); for (int i = 0; i < _actions.Count; i++) { ICell cell = row.GetCell(i) ?? row.CreateCell(i); _actions[i](item, cell); } rowIndex++; } using (var fileStream = new FileStream(_savePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { _workbook.Write(fileStream); _workbook.Close(); } return _list.Count; } } //来源:C/S框架网 | www.csframework.com | QQ:23404761 使用方法 C# Code: var listTmp = _BLL.GetSource(); var targetFile = @"c:\abc.xlsx"; //导出数据 var export = new NPOIExportExcel<ImportLanguageData_DataModel>(listTmp, targetFile, true); var rows = export.AddField(x => x.ObjectID, typeof(String)) .AddField(x => x.ObjectType, typeof(String)) .AddField(x => x.SourceLanType, typeof(String)) .AddField(x => x.SourceLanData, typeof(String)) .AddField(x => x.TargetLanType, typeof(String)) .AddField(x => x.TargetLanData, typeof(String)) .Save(); //来源:C/S框架网 | www.csframework.com | QQ:23404761 导出数据的Excel文件 扫一扫加作者微信
参考文档:
C#导出数据到Excel 源码大全 C#使用SqlBulkCopy快速导入Excel文件(xls/xlsx)-C/S开发框架 在基类窗体扩展一个通用导出Excel文件的按钮(支持导出所有表格的数据到Xlsx文件) C# Excel xls文件导入程序Excel数据库通用类XlsFileDB C#使用Multipart form-data方式上传文件及提交其他数据 解决方案:FastReport.NET导出Excel文件单元格的数据空白 框架提供通用数据导出功能,将表格数据导出到EXCEL文件 C#将数据导出到Excel汇总 C#读取Excel文件提示:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” C# OleDbConnection读取加装Excel2003(.xls),Excel2007(.xlsx)文件 C#使用StreamWriter在大文本文件末尾添加一行内容 C# GridView 资料行数据检查使用的方法(ValidateRow与InvalidRowException) C#中将数据插入到Excel表中 使用[后台数据更新模型]保存主从表数据(C#源码) C# 使用List
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |