java动态生成带下拉框的Excel导入模板
/**
* @Title: createExcelTemplate
* @Description: 生成Excel导入模板
* @param @param filePath Excel文件路径
* @param @param handers Excel列标题(数组)
* @param @param downData 下拉框数据(数组)
* @param @param downRows 下拉列的序号(数组,序号从0开始)
* @return void
* @throws
*/
private static void createExcelTemplate(String filePath, String[] handers,
List<String[]> downData, String[] downRows){
HSSFWorkbook wb = new HSSFWorkbook();//创建工作薄
//表头样式
HSSFCellStyle style = ();
(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
//字体样式
HSSFFont fontStyle = ();
("微软雅黑");
((short)12);
(HSSFFont.BOLDWEIGHT_BOLD);
(fontStyle);
//新建sheet
HSSFSheet sheet1 = ("Sheet1");
HSSFSheet sheet2 = ("Sheet2");
HSSFSheet sheet3 = ("Sheet3");
//生成sheet1内容
HSSFRow rowFirst = (0);//第一个sheet的第一行为标题
//写标题
for(int i=0;i<;i++){
HSSFCell cell = (i); //获取第一行的每个单元格
(i, 4000); //设置每列的列宽
(style); //加样式
(handers[i]); //往单元格里写数据
}
//设置下拉框数据
String[] arr = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
int index = 0;
HSSFRow row = null;
for(int r=0;r<;r++){
String[] dlData = (r);//获取下拉对象
int rownum = (downRows[r]);
if(<5){ //255以内的下拉
//255以内的下拉,参数分别是:作用的sheet、下拉内容数组、起始行、终止行、起始列、终止列
(setDataValidation(sheet1, dlData, 1, 50000, rownum ,rownum)); //超过255个报错
} else { //255以上的下拉,即下拉列表元素很多的情况
//1、设置有效性
//String strFormula = "Sheet2!$A$1:$A$5000" ; //Sheet2第A1到A5000作为下拉列表来源数据
String strFormula = "Sheet2!$"+arr[index]+"$1:$"+arr[index]+"$5000"; //Sheet2第A1到A5000作为下拉列表来源数据
(r, 4000); //设置每列的列宽
//设置数据有效性加载在哪个单元格上,参数分别是:从sheet2获取A1到A5000作为一个下拉的数据、起始行、终止行、起始列、终止列
(SetDataValidation(strFormula, 1, 50000, rownum, rownum)); //下拉列表元素很多的情况
//2、生成sheet2内容
for(int j=0;j<;j++){
if(index==0){ //第1个下拉选项,直接创建行、列
row = (j); //创建数据行
(j, 4000); //设置每列的列宽
(0).setCellValue(dlData[j]); //设置对应单元格的值
} else { //非第1个下拉选项
int rowCount = ();
//("========== LastRowNum =========" + rowCount);
if(j<=rowCount){ //前面创建过的行,直接获取行,创建列
//获取行,创建列
(j).createCell(index).setCellValue(dlData[j]); //设置对应单元格的值
} else { //未创建过的行,直接创建行、创建列
(j, 4000); //设置每列的列宽
//创建行、创建列
(j).createCell(index).setCellValue(dlData[j]); //设置对应单元格的值
}
}
}
index++;
}
}
try {
File f = new File(filePath); //写文件
//不存在则新增
if(!().exists()){
().mkdirs();
}
if(!()){
();
}
FileOutputStream out = new FileOutputStream(f);
();
(out);
();
} catch (FileNotFoundException e) {
();
} catch (IOException e) {
();
}
}