简介:Hutool是一款十分好用的开发工具集,里面包含了大部分日常开发常用的工具,使用简单方便,可以大大提升日常开发效率,十分推荐大家使用。这里简单总结一下基于Hutool的Excel使用。
一、Hutool依赖
<!-- Excel导出、导入-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.5</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
二、导出Excel文件
1、controller接口
@GetMapping("/export/template")
@ApiOperation(value = "导出成员批量导入Excel模板")
public void exportTemplate(HttpServletResponse response){
tenantUserBatchService.exportTemplate(response);
}
2、Service类导出方法
//基于ExcelUtil工具生成新的Excel
//基于ExcelUtil工具,直接创建Excel文件
public void exportTemplate(HttpServletResponse response) {
try {
//创建xlsx格式的
ExcelWriter writer = ExcelUtil.getWriter(true);
//数据处理。。。。。
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//test.xlsx是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition","attachment;filename=test.xlsx");
ServletOutputStream out = response.getOutputStream();
writer.flush(out);
writer.close();
IoUtil.close(out);
}catch (Exception e){
throw new BusinessException("导出Excel文件失败");
}
}
//基于ExcelUtil工具,根据已有的Excel生成新的Excel
//基于ExcelUtil工具,根据已有的Excel生成新的Excel
public void exportTemplate(HttpServletResponse response) {
try {
//1、获取Excel读对象(从流中)
ExcelReader reader = ExcelUtil.getReader(this.getImportExcelTemplate());
//2、获取Excel工作簿
Workbook workbook = reader.getWorkbook();
//数据处理。。。。
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content- Disposition","attachment;filename=import_teacher.xls");
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
out.flush();
out.close();
reader.close();
}catch (Exception e){
throw new BusinessException("导出Excel文件失败");
}
}
三、给Excel单元格设置下拉框
1、生成菜单列表,创建一个隐藏的sheet,并设置填充下拉框的位置及参数信息
//拼接下拉框班级列表选项
List<String> options = Lists.newArrayList();
options.add("第一项 xxx");
options.add("第二项 xxx");
//设置下拉框
if (CollUtil.isNotEmpty(options)) {
//设置隐藏域
String link = creatHiddenSheet(workbook, options);
//填充下拉框列表
creatHiddenBox(sheet, link, 3, 1000, 1, 1);
}
2、 创建隐藏sheet方法
private String creatHiddenSheet(Workbook workbook, List<String> options) {
final String sheetName = "sheet2";
Sheet sheet = workbook.createSheet(sheetName);
for (int i = 0; i < options.size(); i++) {
String option = options.get(i);
Row row = sheet.createRow(i);
Cell cell = row.createCell(0);
cell.setCellValue(option);
}
//设置隐藏
workbook.setSheetHidden(workbook.getSheetIndex(sheetName), true);
//返回隐藏地址
return "=" + sheetName + "!$A$1:$A$" + (options.size() + 1);
}
3、创建下拉框列表
/**
* 创建Excel下拉框(字符255以上,下拉框链接隐藏域)
*
* @param sheet
* @param link 下拉框选项链接地址
* @param firstRow 起始行
* @param lastRow 结束行
* @param firstCol 起始列
* @param lastCol 结束列
*/
private void creatHiddenBox(Sheet sheet, String link, int firstRow, int lastRow, int firstCol, int lastCol) {
CellRangeAddressList cas = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
//创建下拉数据列
DataValidationHelper helper = sheet.getDataValidationHelper();
//设置下拉框选项链接地址
DataValidationConstraint constraint = helper.createFormulaListConstraint(link);
DataValidation dataValidation = helper.createValidation(constraint, cas);
//将下拉数据放入下拉框
sheet.addValidationData(dataValidation);
}