下载excel模板需要带下拉框选项,现在纯JAVA代码来实现
1.模板标题实体类
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ExcelQuestions implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 类型
*/
@Excel(name = "类型",width = 30)
private Integer type;
/**
* 任务
*/
@Excel(name = "任务", width = 30)
private String taskName;
/**
* 类型1
*/
@Excel(name = "类型1", width = 30)
private String taskTarget;
/**
* 类型2
*/
@Excel(name = "类型2", width = 30)
private Integer dutyUnit;
}
2.代码实现如下
public R download(HttpServletResponse response) {
ExportParams exportParams = new ExportParams();
exportParams.setSheetName("测试模板");
response.setContentType("application/x-download;charset=UTF-8");
response.addHeader("Content-disposition", "filename=demo.xls");
List<ExcelQuestions> list = new ArrayList<>();
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, ExcelQuestions.class, list);
//可以通过数据库获取下拉框的内容
List<String> typeList=...;
//list集合转成数组
String[] array2 = typeList.toArray(new String[typeList.size()]);
//设置下拉框的位置 0:第一列列号 0:最后一列列号
selectList(workbook, 0, 0, array2 );
OutputStream fos = null;
try {
fos = response.getOutputStream();
workbook.write(fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return R.ok();
}
/**
* firstRow 開始行號 根据此项目,默认为2(下标0开始)
* lastRow 根据此项目,默认为最大65535
* firstCol 区域中第一个单元格的列号 (下标0开始)
* lastCol 区域中最后一个单元格的列号
* strings 下拉内容
* */
public static void selectList(Workbook workbook, int firstCol, int lastCol, String[] strings ){
Sheet sheet = workbook.getSheetAt(0);
// 生成下拉列表
// 只对(x,x)单元格有效
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 65535, firstCol, lastCol);
// 生成下拉框内容
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(strings);
HSSFDataValidation dataValidation = new HSSFDataValidation(cellRangeAddressList, dvConstraint);
// 对sheet页生效
sheet.addValidationData(dataValidation);
}
导出模板如下