wordpress插件无法安装,谷歌seo关键词优化,网架加工图,学校网站建设先进事迹安装 依赖库#xff1a;NPOI
创建XSSFWorkbook和Sheet 设置表头行 添加数据验证#xff1a; 身份证列用COUNTIF公式确保唯一 地址相关列锁定固定值 学段列设置三级下拉 固定值通过单元格赋值实现 输出
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS…安装 依赖库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(基础信息);// 创建文本格式样式用于身份证号列ICellStyle textStyle workbook.CreateCellStyle();IDataFormat textFormat workbook.CreateDataFormat();textStyle.DataFormat textFormat.GetFormat(); // 表示文本格式// 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);for (int rowIndex 1; rowIndex rowTotal; rowIndex){IRow row sheet.GetRow(rowIndex) ?? sheet.CreateRow(rowIndex);ICell idCell row.GetCell(idCardColumnIndex) ?? row.CreateCell(idCardColumnIndex);// 应用文本样式即使单元格为空idCell.CellStyle textStyle;// 如果已有数据确保以文本格式存储if (idCell.StringCellValue ! null){idCell.SetCellValue(idCell.StringCellValue);}
}// 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, ICellStyle textStyle)
{for (int rowIndex 1; rowIndex rowTotal; rowIndex){IRow row sheet.GetRow(rowIndex) ?? sheet.CreateRow(rowIndex);ICell cell row.GetCell(columnIndex) ?? row.CreateCell(columnIndex);cell.SetCellValue(value);// 如果是身份证列索引1应用文本样式if (columnIndex 1){cell.CellStyle textStyle;}}
}测试 修改下载后的文件后缀为xlsx格式即可打开