java生成复杂excel文件

2025-09-29 14:16:55

1、先去 官网下载相关jar包入下:

java生成复杂excel文件

2、代码实现:

public void fun() throws IOException {


   //文件路径
   String filePath = "C:\\Users\\Administrator\\Desktop\\file\\sample.xls";
   //创建Excel文件(Workbook)
   //HSSFWorkbook workbook = new HSSFWorkbook();
   //创建工作表(Sheet)
   // 声明String数组,并初始化元素(表头名称)
   //第一行表头字段,合并单元格时字段跨几列就将该字段重复几次
   String[] excelHeader0 = {"备注:", " ", "  ", " ", " "," ", " ", " ", " "," ", " ", " ", " "," ", " ", " ", " "};
   //  “0,2,0,0”  ===>  “起始行,截止行,起始列,截止列”
   String[] headnum0 = {"0,0,1,16"};
   //第二行表头字段,其中的空的双引号是为了补全表格边框
   String[] excelHeader1 = {"本周卫生负责人:", "", "", "","本月操作:", "", "", "", "","负责人:", "", "", "", "本月黑板报负责人:", "", "", ""};
   // 合并单元格
   String[] headnum1 = {"1,1,1,3", "1,1,5,8", "1,1,11,12", "1,1,14,16"};


   //第三行表头字段
   String[] excelHeader2 = {"疾病查房:", "", "", "", "主查者:", "", "", "", "应急演练:", "","", " ", " ", " ", "", " ", " "};


   String[] headnum2 = {"2,2,1,3", "2,2,5,7", "2,2,9,16"};


   String[] excelHeader3 = {"信息稿:", " ", "  ", " ", " "," ", " ", " ", " "," ", " ", " ", " "," ", " ", " ", " "};


   String[] headnum3 = {"3,3,1,16"};


   String[] excelHeader4 = {"本月业务学习:", "", "", "", "内容:", "", "", "", "主讲者:", "","", " ", "形式: ", " ", "", " ", ""};


   String[] headnum4 = {"4,4,1,3", "4,4,5,7", "4,4,9,11", "4,4,13,16"};



   String[] excelHeader5 = {"第一周工作安排:", " ", " ", "第二周工作安排:", "", " ", "第三周工作按排:", " ", "", "第四周工作安排:"," ", " ", " 第五周工作安排:", " ", " ", "", ""};


   String[] headnum5 = {"5,5,1,2", "5,5,4,5", "5,5,7,8", "5,5,10,11", "5,5,13,16"};


   String[] excelHeader6 = {"备忘", " ", "  ", " ", " "," ", " ", " ", " "," ", " ", " ", " "," ", " ", " ", " "};
   String[] headnum6 = {"6,6,1,16"};


   // 声明一个工作簿
   HSSFWorkbook wb = new HSSFWorkbook();
   // 生成一个表格
   HSSFSheet sheet = wb.createSheet();
   //创建工作表(Sheet)
   sheet = wb.createSheet("Test");


   // 生成一种样式
   HSSFCellStyle style = wb.createCellStyle();
   // 设置样式
   style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
   style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
   // 生成一种字体
   HSSFFont font = wb.createFont();
   // 设置字体
   font.setFontName("微软雅黑");
   // 设置字体大小
   font.setFontHeightInPoints((short) 12);
   // 字体加粗
   font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
   // 在样式中引用这种字体
   style.setFont(font);
   // 生成表格的第一行
   // 第一行表头
   HSSFRow row = sheet.createRow(0);


   for (int i = 0; i < excelHeader0.length; i++) {


       sheet.autoSizeColumn(i, true);// 根据字段长度自动调整列的宽度
       HSSFCell cell = row.createCell(i);
       cell.setCellValue(excelHeader0[i]);
       cell.setCellStyle(style);
       // System.out.println(excelHeader0[i]);


       if (i >= 0 && i <= 16) {
           for (int j = 1; j < excelHeader0.length; j++) {
               // 从第j列开始填充
               cell = row.createCell(j);
               // 填充excelHeader1[j]第j个元素
               cell.setCellValue(excelHeader0[j]);
               cell.setCellStyle(style);
           }


       }
       row.setHeight((short)512);
       // 设置列宽
       sheet.setColumnWidth(0,    20*256);
       sheet.setColumnWidth(1, 3000);
       sheet.setColumnWidth(2, 3000);
       sheet.setColumnWidth(3, 4500);
       sheet.setColumnWidth(4, 3000);
       sheet.setColumnWidth(5, 3000);
       sheet.setColumnWidth(6, 4500);
       sheet.setColumnWidth(7, 3000);
       sheet.setColumnWidth(8, 3000);
       sheet.setColumnWidth(9, 4500);
       sheet.setColumnWidth(10, 3000);
       sheet.setColumnWidth(11, 3000);
       sheet.setColumnWidth(12, 4500);
       sheet.setColumnWidth(13, 4600);
       sheet.setColumnWidth(14, 3000);
       sheet.setColumnWidth(15, 3000);
       sheet.setColumnWidth(16, 3000);
   }


   // 动态合并单元格
   for (int i = 0; i < headnum0.length; i++) {


       sheet.autoSizeColumn(i, true);
       String[] temp = headnum0[i].split(",");
       Integer startrow = Integer.parseInt(temp[0]);
       Integer overrow = Integer.parseInt(temp[1]);
       Integer startcol = Integer.parseInt(temp[2]);
       Integer overcol = Integer.parseInt(temp[3]);
       sheet.addMergedRegion(new CellRangeAddress(startrow, overrow, startcol, overcol));
   }


   // 第二行表头
   row = sheet.createRow(1);
   for (int i = 0; i < excelHeader1.length; i++) {
       // 自动调整宽度
       sheet.autoSizeColumn(i, true);
       HSSFCell cell = row.createCell(i + 1);
       cell.setCellValue(excelHeader1[i]);
       cell.setCellStyle(style);
       row.setHeight((short)512);
       if (i >= 0 && i <= 16) {
           for (int j = 0; j < excelHeader1.length; j++) {
               // 从第j+1列开始填充
               cell = row.createCell(j );
               // 填充excelHeader1[j]第j个元素
               cell.setCellValue(excelHeader1[j]);
               cell.setCellStyle(style);
           }
       }


       sheet.setColumnWidth(0,    20*256);
       sheet.setColumnWidth(1, 3000);
       sheet.setColumnWidth(2, 3000);
       sheet.setColumnWidth(3, 4500);
       sheet.setColumnWidth(4, 3000);
       sheet.setColumnWidth(5, 3000);
       sheet.setColumnWidth(6, 4500);
       sheet.setColumnWidth(7, 3000);
       sheet.setColumnWidth(8, 3000);
       sheet.setColumnWidth(9, 4500);
       sheet.setColumnWidth(10, 3000);
       sheet.setColumnWidth(11, 3000);
       sheet.setColumnWidth(12, 4500);
       sheet.setColumnWidth(13, 4600);
       sheet.setColumnWidth(14, 3000);
       sheet.setColumnWidth(15, 3000);
       sheet.setColumnWidth(16, 3000);


   }


   // 动态合并单元格
   for (int i = 0; i < headnum1.length; i++) {


       // sheet.autoSizeColumn(i, true);
       String[] temp = headnum1[i].split(",");
       Integer startrow = Integer.parseInt(temp[0]);
       Integer overrow = Integer.parseInt(temp[1]);
       Integer startcol = Integer.parseInt(temp[2]);
       Integer overcol = Integer.parseInt(temp[3]);
       sheet.addMergedRegion(new CellRangeAddress(startrow, overrow, startcol, overcol));
   }
   // 第三行表头
   row = sheet.createRow(2);
   for (int i = 0; i < excelHeader2.length; i++) {


       HSSFCell cell = row.createCell(i + 2);
       cell.setCellValue(excelHeader2[i]);
       cell.setCellStyle(style);
       // System.out.println(excelHeader2[i]);
       // sheet.autoSizeColumn(i, true);// 自动调整宽度
       row.setHeight((short)512);
       if (i >= 0 && i <= 16) {
           for (int j = 0; j < excelHeader2.length; j++) {
               // 从第j+2列开始填充
               cell = row.createCell(j);
               // 填充excelHeader1[j]第j个元素
               cell.setCellValue(excelHeader2[j]);
               cell.setCellStyle(style);
           }
       }


       sheet.setColumnWidth(0,    20*256);
       sheet.setColumnWidth(1, 3000);
       sheet.setColumnWidth(2, 3000);
       sheet.setColumnWidth(3, 4500);
       sheet.setColumnWidth(4, 3000);
       sheet.setColumnWidth(5, 3000);
       sheet.setColumnWidth(6, 4500);
       sheet.setColumnWidth(7, 3000);
       sheet.setColumnWidth(8, 3000);
       sheet.setColumnWidth(9, 4500);
       sheet.setColumnWidth(10, 3000);
       sheet.setColumnWidth(11, 3000);
       sheet.setColumnWidth(12, 4500);
       sheet.setColumnWidth(13, 4600);
       sheet.setColumnWidth(14, 3000);
       sheet.setColumnWidth(15, 3000);
       sheet.setColumnWidth(16, 3000);


   }
   // 动态合并单元格
   for (int i = 0; i < headnum2.length; i++) {


       // sheet.autoSizeColumn(i, true);
       String[] temp = headnum2[i].split(",");
       Integer startrow = Integer.parseInt(temp[0]);
       Integer overrow = Integer.parseInt(temp[1]);
       Integer startcol = Integer.parseInt(temp[2]);
       Integer overcol = Integer.parseInt(temp[3]);
       sheet.addMergedRegion(new CellRangeAddress(startrow, overrow, startcol, overcol));
   }


   row = sheet.createRow(3);
   for (int i = 0; i < excelHeader3.length; i++) {


       HSSFCell cell = row.createCell(i + 2);
       cell.setCellValue(excelHeader3[i]);
       cell.setCellStyle(style);
       // System.out.println(excelHea;// 自动调整宽度
       row.setHeight((short)512);
       if (i >=0 && i <= 16) {
           for (int j = 0; j < excelHeader3.length; j++) {
               // 从第j+2列开始填充
               cell = row.createCell(j);
               // 填充excelHeader1[j]第j个元素
               cell.setCellValue(excelHeader3[j]);
               cell.setCellStyle(style);
           }
       }
       sheet.setColumnWidth(0,    20*256);
       sheet.setColumnWidth(1, 3000);
       sheet.setColumnWidth(2, 3000);
       sheet.setColumnWidth(3, 4500);
       sheet.setColumnWidth(4, 3000);
       sheet.setColumnWidth(5, 3000);
       sheet.setColumnWidth(6, 4500);
       sheet.setColumnWidth(7, 3000);
       sheet.setColumnWidth(8, 3000);
       sheet.setColumnWidth(9, 4500);
       sheet.setColumnWidth(10, 3000);
       sheet.setColumnWidth(11, 3000);
       sheet.setColumnWidth(12, 4500);
       sheet.setColumnWidth(13, 4600);
       sheet.setColumnWidth(14, 3000);
       sheet.setColumnWidth(15, 3000);
       sheet.setColumnWidth(16, 3000);
   }
   // 动态合并单元格
   for (int i = 0; i < headnum3.length; i++) {
       // sheet.autoSizeColumn(i, true);
       String[] temp = headnum3[i].split(",");
       Integer startrow = Integer.parseInt(temp[0]);
       Integer overrow = Integer.parseInt(temp[1]);
       Integer startcol = Integer.parseInt(temp[2]);
       Integer overcol = Integer.parseInt(temp[3]);
       sheet.addMergedRegion(new CellRangeAddress(startrow, overrow, startcol, overcol));
   }



   row = sheet.createRow(4);
   for (int i = 0; i < excelHeader4.length; i++) {


       HSSFCell cell = row.createCell(i + 2);
       cell.setCellValue(excelHeader4[i]);
       cell.setCellStyle(style);
       // System.out.println(excelHeader2[i]);
       // sheet.autoSizeColumn(i, true);// 自动调整宽度
       row.setHeight((short)512);
       if (i >= 0 && i <= 16) {
           for (int j = 0; j < excelHeader4.length; j++) {
               // 从第j+2列开始填充
               cell = row.createCell(j);
               // 填充excelHeader1[j]第j个元素
               cell.setCellValue(excelHeader4[j]);
               cell.setCellStyle(style);
           }
       }
       sheet.setColumnWidth(0,    20*256);
       sheet.setColumnWidth(1, 3000);
       sheet.setColumnWidth(2, 3000);
       sheet.setColumnWidth(3, 4500);
       sheet.setColumnWidth(4, 3000);
       sheet.setColumnWidth(5, 3000);
       sheet.setColumnWidth(6, 4500);
       sheet.setColumnWidth(7, 3000);
       sheet.setColumnWidth(8, 3000);
       sheet.setColumnWidth(9, 4500);
       sheet.setColumnWidth(10, 3000);
       sheet.setColumnWidth(11, 3000);
       sheet.setColumnWidth(12, 4500);
       sheet.setColumnWidth(13, 4600);
       sheet.setColumnWidth(14, 3000);
       sheet.setColumnWidth(15, 3000);
       sheet.setColumnWidth(16, 3000);


   }
   // 动态合并单元格
   for (int i = 0; i < headnum4.length; i++) {


       // sheet.autoSizeColumn(i, true);
       String[] temp = headnum4[i].split(",");
       Integer startrow = Integer.parseInt(temp[0]);
       Integer overrow = Integer.parseInt(temp[1]);
       Integer startcol = Integer.parseInt(temp[2]);
       Integer overcol = Integer.parseInt(temp[3]);
       sheet.addMergedRegion(new CellRangeAddress(startrow, overrow, startcol, overcol));
   }


   row = sheet.createRow(5);
   for (int i = 0; i < excelHeader5.length; i++) {


       HSSFCell cell = row.createCell(i + 2);
       cell.setCellValue(excelHeader5[i]);
       cell.setCellStyle(style);
       // System.out.println(excelHeader2[i]);
       // sheet.autoSizeColumn(i, true);// 自动调整宽度
       row.setHeight((short)1500);
       if (i >= 0 && i <= 16) {
           for (int j = 0; j < excelHeader5.length; j++) {
               // 从第j+2列开始填充
               cell = row.createCell(j);
               // 填充excelHeader1[j]第j个元素
               cell.setCellValue(excelHeader5[j]);
               cell.setCellStyle(style);
           }
       }
       sheet.setColumnWidth(0,    20*256);
       sheet.setColumnWidth(1, 3000);
       sheet.setColumnWidth(2, 3000);
       sheet.setColumnWidth(3, 4500);
       sheet.setColumnWidth(4, 3000);
       sheet.setColumnWidth(5, 3000);
       sheet.setColumnWidth(6, 4500);
       sheet.setColumnWidth(7, 3000);
       sheet.setColumnWidth(8, 3000);
       sheet.setColumnWidth(9, 4500);
       sheet.setColumnWidth(10, 3000);
       sheet.setColumnWidth(11, 3000);
       sheet.setColumnWidth(12, 4500);
       sheet.setColumnWidth(13, 4600);
       sheet.setColumnWidth(14, 3000);
       sheet.setColumnWidth(15, 3000);
       sheet.setColumnWidth(16, 3000);
   }
   // 动态合并单元格
   for (int i = 0; i < headnum5.length; i++) {


       // sheet.autoSizeColumn(i, true);
       String[] temp = headnum5[i].split(",");
       Integer startrow = Integer.parseInt(temp[0]);
       Integer overrow = Integer.parseInt(temp[1]);
       Integer startcol = Integer.parseInt(temp[2]);
       Integer overcol = Integer.parseInt(temp[3]);
       sheet.addMergedRegion(new CellRangeAddress(startrow, overrow, startcol, overcol));
   }


   row = sheet.createRow(6);
   for (int i = 0; i < excelHeader6.length; i++) {


       HSSFCell cell = row.createCell(i + 2);
       cell.setCellValue(excelHeader6[i]);
       cell.setCellStyle(style);
       // System.out.println(excelHeader2[i]);
       // sheet.autoSizeColumn(i, true);// 自动调整宽度
       row.setHeight((short)512);
       if (i >= 0 && i <= 16) {
           for (int j = 0; j < excelHeader6.length; j++) {
               // 从第j+2列开始填充
               cell = row.createCell(j);
               // 填充excelHeader1[j]第j个元素
               cell.setCellValue(excelHeader6[j]);
               cell.setCellStyle(style);
           }
       }
       sheet.setColumnWidth(0,    20*256);
       sheet.setColumnWidth(1, 3000);
       sheet.setColumnWidth(2, 3000);
       sheet.setColumnWidth(3, 4500);
       sheet.setColumnWidth(4, 3000);
       sheet.setColumnWidth(5, 3000);
       sheet.setColumnWidth(6, 4500);
       sheet.setColumnWidth(7, 3000);
       sheet.setColumnWidth(8, 3000);
       sheet.setColumnWidth(9, 4500);
       sheet.setColumnWidth(10, 3000);
       sheet.setColumnWidth(11, 3000);
       sheet.setColumnWidth(12, 4500);
       sheet.setColumnWidth(13, 4600);
       sheet.setColumnWidth(14, 3000);
       sheet.setColumnWidth(15, 3000);
       sheet.setColumnWidth(16, 3000);
   }
   // 动态合并单元格
   for (int i = 0; i < headnum6.length; i++) {


       // sheet.autoSizeColumn(i, true);
       String[] temp = headnum6[i].split(",");
       Integer startrow = Integer.parseInt(temp[0]);
       Integer overrow = Integer.parseInt(temp[1]);
       Integer startcol = Integer.parseInt(temp[2]);
       Integer overcol = Integer.parseInt(temp[3]);
       sheet.addMergedRegion(new CellRangeAddress(startrow, overrow, startcol, overcol));
   }


   FileOutputStream out = new FileOutputStream(filePath);
   //保存Excel文件
   wb.write(out);
   //关闭文件流
   out.close();
   System.out.println("OK!");
}

3、效果预览

java生成复杂excel文件

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢