前些日子要在原有的Excel基础上搞一个多标题的模板提示输入的信息,废话不多说上图上代码:
首先修改 ExcelUtil.java
加入以下代码
/**
* 多个 标题
*/
private String[] titles;
/**
* 多个 标题 1
* @param list 集合打印 内容
* @param sheetName sheet名称
* @param titles 标题 名称
*/
public void exportExcel(HttpServletResponse response, List<T> list, String sheetName, String[] titles)
{
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
this.init(list, sheetName, titles, Type.EXPORT);
exportExcel(response);
}
/**
* 多个 标题 2
* @param list 集合打印 内容
* @param sheetName sheet名称
* @param titles 标题 名称
* @param type 导入 或 导出
*/
public void init(List<T> list, String sheetName, String[] titles, Type type)
{
if (list == null)
{
list = new ArrayList<T>();
}
this.list = list;
this.sheetName = sheetName;
this.type = type;
this.titles = titles;
createExcelField();
createWorkbook();
createTitle();
createSubHead();
}
/**
* 创建excel第一 或 多行 行标题
*/
public void createTitle() {
CellStyle titless = wb.createCellStyle();
titless.cloneStyleFrom(styles.get("title"));
//标题 自动换行
titless.setWrapText(true);
Font titleFont = wb.createFont();
//标题字体
titleFont.setFontName("Arial");
//标题 字体大小
titleFont.setFontHeightInPoints((short) 10);
titless.setFont(titleFont);
if (ArrayUtils.isNotEmpty(titles)) {
//设置 标题的高度
Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0);
titleRow.setHeightInPoints(60);
for (int i = 0; i < titles.length; i++) {
Cell titleCell = titleRow.createCell(i);
titleCell.setCellStyle(titless);
titleCell.setCellValue(titles[i]);
}
} else if (StringUtils.isNotEmpty(title)) {
Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0);
titleRow.setHeightInPoints(60);
Cell titleCell = titleRow.createCell(0);
titleCell.setCellStyle(titless);
titleCell.setCellValue(title);
}
}
之后 去改你的实体类,注意!!!!我这个存在一个缺陷必须每个表头对应每个列,不需要提示表头的要用" ",空字符跳过去 觉得太长可以加\n 换行,
上模板:
@PostMapping("/importTemplate")
public void importTemplate(HttpServletResponse response) {
List<FpglOrdermain> list = new ArrayList<FpglOrdermain>();
ExcelUtil<FpglOrdermain> util = new ExcelUtil<FpglOrdermain>(FpglOrdermain.class);
String[] titles = {
"标红“*”字段必填,且字段名称严禁更改\n" +
"\n" +
"长度不得超过64位",
"(1个汉字=2个字符)",
"税号",
"","","",
"类型",
"",
"种类",
"",
"地址不超出100字符",
"",
"不超出100字符",
"","",
"姓名不超过20个字符",
"姓名不超过20个字符",
"姓名不超过20个字符",
"","",
"",
"对应明细行的行数\n" + "如:第一条明细 从 1 开始",
"名称不超出90字符",
"未填,否则则自动匹配",
"规格型号不超出40字符",
"单位不超出22字符",
"数量、单价、金额:任选其中两项,或者仅填金额如果三项均填写:默认读取数量和单价 单价:不得超过10位小数 数量:不得超过10位小数 金额:不得超过2位小数",
"","","","","",
"同一订单下含税标志必须一致",
"(仅限一行明细时填写有效,多行明细不可填写)",
"1:是 0:否",
"必填",
""
};
util.exportExcel(response, list, "订单列表数据",titles);
}
这个是模板,导出的自己按着格式改一下啦0.0
注意!!!!因为多加了一行表头要加个去除从1开始读取
@PreAuthorize("@ss.hasPermi('fpgl:ordermain:import')")
@Log(title = "列表", businessType = BusinessType.IMPORT)
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
// System.out.println(111);
ExcelUtil<FpglOrdermain> util = new ExcelUtil<FpglOrdermain>(FpglOrdermain.class);
//注意这个 1
List<FpglOrdermain> orderList = util.importExcel(file.getInputStream(),1);
String operName = getUsername();
String message = fpglOrdermainService.importOrder(orderList, updateSupport, operName);
return AjaxResult.success(message);
}
上面的标题放在controller 很不美观
所以定义一个 静态类
/**
* 下载订单列表模板
*/
@PostMapping("/importTemplate")
public void importTemplate(HttpServletResponse response) {
List<FpglOrdermain> list = new ArrayList<FpglOrdermain>();
ExcelUtil<FpglOrdermain> util = new ExcelUtil<FpglOrdermain>(FpglOrdermain.class);
String[] titles = ExcelTemplate.ExcelOrdermain();
util.exportExcel(response, list, "订单列表数据",titles);
}
定义一个Excel标题类:ExcelTemplate.java
public static String [] ExcelOrdermain(){
String[] titles = {
"标红“*”字段必填,且字段名称严禁更改\n" +
"\n" +
"长度不得超过64位",
"(1个汉字=2个字符)",
"税号",
"","","",
"类型",
"",
"种类",
"",
"地址不超出100字符",
"",
"不超出100字符",
"","",
"姓名不超过20个字符",
"姓名不超过20个字符",
"姓名不超过20个字符",
"","",
"",
"对应明细行的行数\n" + "如:第一条明细 从 1 开始",
"名称不超出90字符",
"未填,否则则自动匹配",
"规格型号不超出40字符",
"单位不超出22字符",
"数量、单价、金额:任选其中两项,或者仅填金额如果三项均填写:默认读取数量和单价 单价:不得超过10位小数 数量:不得超过10位小数 金额:不得超过2位小数",
"","","","","",
"同一订单下含税标志必须一致",
"(仅限一行明细时填写有效,多行明细不可填写)",
"1:是 0:否",
"必填",
""
};
return titles;
}
完工.0.0. 可以的话有大佬再帮忙修改下哈0.0 觉得可以点个赞哇,达瓦里氏.0.0.