Java-POI-Excel导出 包含跨行跨列 Excel表格样式格式化。

首先是页面效果展示:Java-POI-Excel导出 包含跨行跨列 Excel表格样式格式化。_第1张图片

格式化代码优化:

        String list[] = { "序号", "D", "S", "D", "G", "C", "D", "D", "J" , "H", "K" };// 设置表头
        String list1[] = { "E", "F",};// 设置表头
        String list2[] = { "月度考核"};// 设置表头
        
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet();


        //设置跨行跨列格式:CellRangeAddress(A, B,C,D) A:开始行,B:结束行,C:开始列,D:结束列
        sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 0));//
        sheet.addMergedRegion(new CellRangeAddress(2, 3, 1, 1));//
        sheet.addMergedRegion(new CellRangeAddress(2, 3, 2, 2));// 
        sheet.addMergedRegion(new CellRangeAddress(2, 3, 3, 3));// 
        sheet.addMergedRegion(new CellRangeAddress(2, 3, 4, 4));// 
        sheet.addMergedRegion(new CellRangeAddress(2, 3, 5, 5));//
        sheet.addMergedRegion(new CellRangeAddress(2, 3, 8, 8));// 
        sheet.addMergedRegion(new CellRangeAddress(2, 3, 9, 9));// 
        sheet.addMergedRegion(new CellRangeAddress(2, 3, 10, 10));// 
        sheet.addMergedRegion(new CellRangeAddress(2, 2, 6, 7));// 
        sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 10));// 
        

        HSSFRow row = sheet.createRow(2); // 创建第一行(标题行)
        HSSFRow row1 = sheet.createRow(3); // 创建第一行(标题行)

        HSSFRow row3 = sheet.createRow(0);            


        // 设置单元格表单内容样式
        HSSFCellStyle style_nr = wb.createCellStyle();
        style_nr.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
        style_nr.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格下边框
        style_nr.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置单元格上边框
        style_nr.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 设置单元格上边框
        style_nr.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置单元格右边框
        style_nr.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
        style_nr.setFillBackgroundColor(Font.COLOR_NORMAL);

        // 设置单元格表单标题样式
        HSSFCellStyle style_bt = wb.createCellStyle();
        HSSFFont font = wb.createFont();
        font.setFontHeightInPoints((short) 12);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置加粗
        style_bt.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格下边框
        style_bt.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置单元格上边框
        style_bt.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 设置单元格上边框
        style_bt.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置单元格右边框
        style_bt.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
        style_bt.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);//创建跨行居中格式

       style_bt.setFont(font);
        
        // 设置单元格表单标题样式
        HSSFCellStyle style_bt_no = wb.createCellStyle();
        HSSFFont font_ = wb.createFont();
        font_.setFontHeightInPoints((short) 23);
        font_.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置加粗
        style_bt_no.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格下边框
        style_bt_no.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置单元格上边框
        style_bt_no.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 设置单元格上边框
        style_bt_no.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置单元格右边框
        style_bt_no.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
        style_bt_no.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);//创建跨行居中格式
        style_bt_no.setFont(font_);
     
        
        for (int i = 0; i < list2.length; i++) {// 创建第一行(标题行的第一列)
            HSSFCell cell = row3.createCell(i);
            cell.setCellValue(list2[0]);
            cell.setCellStyle(style_bt_no);
        }
        
        for (int i = 0; i < list.length; i++) {// 创建第二行(标题行的第一列)
            HSSFCell cell = row.createCell(i);
            cell.setCellValue(list[i]);
            cell.setCellStyle(style_bt);
        }
        
        for(int i = 0; i < list.length; i++){// 创建第三行(标题行的第二列)
            if(i==6){
                HSSFCell cell = row1.createCell(6);
                cell.setCellValue(list1[0]);
                cell.setCellStyle(style_bt);
            }else if(i==7){
                HSSFCell cell = row1.createCell(7);
                cell.setCellValue(list1[1]);
                cell.setCellStyle(style_bt);
            }else{
                HSSFCell cell = row1.createCell(i);
                cell.setCellValue("");
                cell.setCellStyle(style_bt);
            }
            
        }
        int j = 4;// 定义一个循环开始行数

for (XXXX   x : xxlist) {
            HSSFRow datarow = sheet.createRow((int) j);
            HSSFCell cell0 = datarow.createCell(0);
            cell0.setCellValue((j-3));
            cell0.setCellStyle(style_nr);
            sheet.setColumnWidth(0, 2000);//设置单元格的宽度
 
            j++;
        }

如果你想在一个单元格实现自动换行怎么做呢?

1:style.setWrapText(true);
2:String dd = dfdd.replace(",","\r\n");

 

你可能感兴趣的:(Java)