当前位置: 首页 > ai >正文

C# net8生成excel,并设置列规则导出文件

安装 依赖库:NPOI
在这里插入图片描述

创建XSSFWorkbook和Sheet
设置表头行
添加数据验证:
身份证列用COUNTIF公式确保唯一
地址相关列锁定固定值
学段列设置三级下拉
固定值通过单元格赋值实现
输出

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.Util;
using System.IO;/// <summary>
/// 下载模板
/// </summary>
/// <returns></returns>
public ActionResult DownloadTemplate(DownloadTemplateDto input) {if (input.total< 1) throw new UserFriendlyException("人数不能为0");var stream = GenerateExcel(input.total);var data= stream.ToArray();return new FileContentResult(data, "application/octet-stream");//application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
}private MemoryStream GenerateExcel(int rowTotal)
{rowTotal = rowTotal + 10;//总行数// 1. 创建工作簿和工作表IWorkbook workbook = new XSSFWorkbook();ISheet sheet = workbook.CreateSheet("基础信息");// 2. 创建列名行// 2. 设置列名(共12列)string[] headers = { "姓名", "身份证号", "现住省", "现住市", "现住区", "联系电话","详细地址", "学校名称", "学校编号", "学段", "年级", "班级" };IRow headerRow = sheet.CreateRow(0);for (int i = 0; i < headers.Length; i++){headerRow.CreateCell(i).SetCellValue(headers[i]);}// 3. 设置数据验证规则IDataValidationHelper validationHelper = sheet.GetDataValidationHelper();// 规则1:身份证号列唯一性验证CellRangeAddressList idRange = new CellRangeAddressList(1, rowTotal, 1, 1); // B列IDataValidationConstraint idConstraint = validationHelper.CreateCustomConstraint("COUNTIF(B:B, B1)=1");IDataValidation idValidation = validationHelper.CreateValidation(idConstraint, idRange);idValidation.CreateErrorBox("重复错误", "身份证号必须唯一!");sheet.AddValidationData(idValidation);// 规则2:固定值验证(省、市、区、学校名称、学校编号)SetFixedValue(sheet, 2, "北京市", rowTotal); // C列:现住省SetFixedValue(sheet, 3, "昌平区", rowTotal); // D列:现住市SetFixedValue(sheet, 4, "A街道", rowTotal); // E列:街道SetFixedValue(sheet, 7, deptName, rowTotal); // H列:学校名称SetFixedValue(sheet, 8, deptId, rowTotal); // I列:学校编号// 规则3:学段下拉选择(小学/初中/高中)CellRangeAddressList stageRange = new CellRangeAddressList(1, rowTotal, 9, 9); // J列IDataValidationConstraint stageConstraint = validationHelper.CreateExplicitListConstraint(new string[] { "小学", "初中", "高中", "高三", "中专", "技校", "大学" });IDataValidation stageValidation = validationHelper.CreateValidation(stageConstraint, stageRange);stageValidation.CreateErrorBox("输入错误", "请选择下拉选中对应值!");sheet.AddValidationData(stageValidation);// 规则4:年级CellRangeAddressList grade = new CellRangeAddressList(1, rowTotal, 10, 10); // K列IDataValidationConstraint gradeConstraint = validationHelper.CreateExplicitListConstraint(new string[] { "一年级", "二年级", "三年级", "四年级", "五年级", "六年级","初一", "初二", "初三", "高一", "高二", "高三", "大一", "大二", "大三", "大四" });IDataValidation gradeValidation = validationHelper.CreateValidation(gradeConstraint, grade);gradeValidation.CreateErrorBox("输入错误", "请选择下拉选中对应值!");sheet.AddValidationData(gradeValidation);// 5. 流式输出MemoryStream stream = new MemoryStream();workbook.Write(stream, true);stream.Position = 0; // 重置流位置 return stream;
}// 辅助方法:为整列设置固定值
private void SetFixedValue(ISheet sheet, int columnIndex, string value,int rowTotal)
{for (int rowIndex = 1; rowIndex <= 10000; rowIndex++){IRow row = sheet.GetRow(rowIndex) ?? sheet.CreateRow(rowIndex);row.CreateCell(columnIndex).SetCellValue(value);}
}

测试
在这里插入图片描述
修改下载后的文件后缀为xlsx格式即可打开
在这里插入图片描述

http://www.xdnf.cn/news/13649.html

相关文章:

  • 【Linux】Linux基础I/O
  • 织梦dedecms内容页调用seotitle标题的写法
  • Python训练营---DAY52
  • day01 ——Java基础入门
  • 135. Candy
  • C# 界面检测显示器移除并在可用显示器上显示
  • 关键领域软件测试新范式:如何在安全合规前提下提升效率?
  • 14.FTP传输分析
  • 云安全【阿里云ECS攻防】
  • 解决office各种疑难杂症
  • HarmonyOS运动开发:深度解析文件预览的正确姿势
  • win11系统部署tomcat10教程
  • 详解docker挂载目录常用方式
  • flutter把 pubspec.yaml 中的name改成了新的值
  • window 显示驱动开发-为视频处理创建渲染目标图面
  • 使用 React+Vite+Electron 搭建桌面应用
  • 【机器学习】Teacher-Student框架
  • 佰力博与你探讨表面电阻测试的一些方法和测试应用场景
  • 前端面试七之列表渲染和组件重用
  • 新加坡金融管理局责令未获许可加密货币公司于6月30日前退出,Bitget、Bybit考虑撤离
  • 写实交互数字人:赋能消防知识科普,点亮智能交互讲解新未来
  • java(JDBC)
  • 3分钟入门深度学习(迷你级小项目): XOR 门神经网络训练与测试简明教程
  • 上海市计算机学会竞赛平台2022年7月月赛丙组因数之和
  • 蘑菇街关键字搜索接口技术实现
  • 边缘计算的突破:从云端到边缘的 IT 新前沿
  • 你管这玩意叫网络?网络图解
  • MySQL 索引学习笔记
  • 第16篇:数据库中间件多租户架构与动态数据源隔离机制
  • 黑马点评【缓存】