java动态生成带下拉框的Excel导入模板

时间:2025-03-18 13:26:30
/** * @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) { (); } }