fix: 取消 excel/ 忽略规则并纳入班级导入模板源码

避免 org.dromara.xg.excel 源码被误忽略,导致同事拉取后编译失败。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-08-04 10:21:25 +08:00
1 parent 4ada3c6f01
commit a15efa8ef8
3 files changed
+107 -1

No files matched your search

-1
View File
@@ -161,7 +161,6 @@ coverage/
*.crt
*.p12
*.keystore/xgxt/
excel/
backend/script/sql/add-related-type-field.sql
backend/script/sql/execute-fix-stgl-member.sql
@@ -0,0 +1,58 @@
package org.dromara.xg.excel;
import cn.idev.excel.write.handler.WorkbookWriteHandler;
import cn.idev.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
/**
* 班级导入模板增强:加宽学院/专业/学历层级列,毕业年份按入学年份+学制公式自动计算
*
* @author zlwu
*/
public class XgClassMsgImportTemplateHandler implements WorkbookWriteHandler {
/** 学院列 */
private static final int COL_COLLEGE = 0;
/** 专业列 */
private static final int COL_MAJOR = 1;
/** 学历层级列 */
private static final int COL_CLASS_TYPE = 3;
/** 毕业年份列 */
private static final int COL_GRADUATION_YEAR = 7;
/** 预置公式行数(含示例行),对应 Excel 第 2 行起 */
private static final int FORMULA_ROW_COUNT = 200;
@Override
public void afterWorkbookDispose(WriteWorkbookHolder writeWorkbookHolder) {
Workbook workbook = writeWorkbookHolder.getWorkbook();
if (workbook.getNumberOfSheets() <= 0) {
return;
}
Sheet sheet = workbook.getSheetAt(0);
// 加宽下拉相关列(单位:1/256 字符宽)
sheet.setColumnWidth(COL_COLLEGE, 24 * 256);
sheet.setColumnWidth(COL_MAJOR, 30 * 256);
sheet.setColumnWidth(COL_CLASS_TYPE, 20 * 256);
// 毕业年份 = 入学年份(F) + 学制(G);空值时不显示 0
for (int rowIndex = 1; rowIndex <= FORMULA_ROW_COUNT; rowIndex++) {
int excelRowNum = rowIndex + 1;
Row row = sheet.getRow(rowIndex);
if (row == null) {
row = sheet.createRow(rowIndex);
}
Cell cell = row.getCell(COL_GRADUATION_YEAR);
if (cell == null) {
cell = row.createCell(COL_GRADUATION_YEAR);
} else {
cell.setBlank();
}
cell.setCellFormula("IF(OR(F" + excelRowNum + "=\"\",G" + excelRowNum + "=\"\"),\"\",F"
+ excelRowNum + "+G" + excelRowNum + ")");
}
}
}
@@ -0,0 +1,49 @@
package org.dromara.xg.excel;
import cn.idev.excel.FastExcel;
import cn.idev.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.dromara.common.core.utils.file.FileUtils;
import org.dromara.common.excel.convert.ExcelBigNumberConvert;
import org.dromara.common.excel.core.DropDownOptions;
import org.dromara.common.excel.core.ExcelDownHandler;
import org.dromara.common.excel.handler.DataWriteHandler;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xg.domain.vo.XgClassMsgImportVo;
import java.io.IOException;
import java.util.List;
/**
* 班级信息导入模板导出
*
* @author zlwu
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class XgClassMsgImportTemplateWriter {
public static void write(List<XgClassMsgImportVo> list, HttpServletResponse response,
List<DropDownOptions> options) {
String sheetName = "班级信息导入模板";
try {
String filename = ExcelUtil.encodingFilename(sheetName);
FileUtils.setAttachmentResponseHeader(response, filename);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
ServletOutputStream os = response.getOutputStream();
FastExcel.write(os, XgClassMsgImportVo.class)
.autoCloseStream(false)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.registerConverter(new ExcelBigNumberConvert())
.registerWriteHandler(new DataWriteHandler(XgClassMsgImportVo.class))
.registerWriteHandler(new ExcelDownHandler(options))
.registerWriteHandler(new XgClassMsgImportTemplateHandler())
.sheet(sheetName)
.doWrite(list);
} catch (IOException e) {
throw new RuntimeException("导出班级信息导入模板异常", e);
}
}
}