java poi3.10.1基本excel使用
阅读原文时间:2023年07月10日阅读:2

比较好的实现方式是通过提前做好excel文件,然后使用这个做好的excel文件作为模板,使用poi读入这个文件,将需要的值填入;这样就不要编程来设置行宽的样式;

效果:

代码:

//时间
String checkTime = "yyyy/MM/dd";

    //人员查询  
    Set preParticipantNames = new HashSet();

    HSSFWorkbook wb = new HSSFWorkbook();

    // 生成一个样式  
    HSSFCellStyle style = wb.createCellStyle();  
    this.setHSSFCellBorder(style);  
    style.setAlignment(HSSFCellStyle.ALIGN\_CENTER);// 设置单元格为水平对齐的类型  
    style.setVerticalAlignment(HSSFCellStyle.VERTICAL\_CENTER);  
    HSSFFont songFont = createSongFont(wb);  
    style.setFont(songFont);

    HSSFCellStyle songPoint14FontStyle = wb.createCellStyle();  
    this.setHSSFCellBorder(songPoint14FontStyle);  
    songPoint14FontStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL\_CENTER);  
    songPoint14FontStyle.setAlignment(HSSFCellStyle.ALIGN\_CENTER);// 设置单元格为水平对齐的类型  
    HSSFFont songPoint14Font = createSongFont(wb);  
    songPoint14Font.setFontHeightInPoints((short) 14); //设置字号  
    songPoint14FontStyle.setFont(songPoint14Font);

    HSSFCellStyle arialFontStyle = wb.createCellStyle();  
    this.setHSSFCellBorder(arialFontStyle);  
    arialFontStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL\_CENTER);  
    arialFontStyle.setAlignment(HSSFCellStyle.ALIGN\_CENTER);// 设置单元格为水平对齐的类型  
    HSSFFont arialFont = createSongFont(wb);  
    arialFont.setFontName("Arial");  
    arialFontStyle.setFont(arialFont);

    HSSFCellStyle rightBoldStyle = wb.createCellStyle();  
    rightBoldStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL\_CENTER);  
    rightBoldStyle.setAlignment(HSSFCellStyle.ALIGN\_RIGHT);// 设置单元格为水平对齐的类型  
    HSSFFont boldSongFont = createSongFont(wb);  
    boldSongFont.setBoldweight(HSSFFont.BOLDWEIGHT\_BOLD);//粗体显示  
    rightBoldStyle.setFont(boldSongFont);

    HSSFCellStyle songPoint22RedFontStyle = wb.createCellStyle();  
    songPoint22RedFontStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL\_CENTER);  
    songPoint22RedFontStyle.setAlignment(HSSFCellStyle.ALIGN\_CENTER);// 设置单元格为水平对齐的类型  
    HSSFFont songPoint22RedFont = createSongFont(wb);  
    songPoint22RedFont.setFontHeightInPoints((short) 22); //设置字号  
    songPoint22RedFont.setBoldweight(HSSFFont.BOLDWEIGHT\_BOLD);//粗体显示  
    songPoint22RedFont.setColor(HSSFColor.RED.index);  
    songPoint22RedFontStyle.setFont(songPoint22RedFont);

    HSSFCellStyle contentDefaultStyle = wb.createCellStyle();  
    this.setHSSFCellBorder(contentDefaultStyle);  
    contentDefaultStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL\_CENTER);  
    contentDefaultStyle.setFont(songFont);

    HSSFCellStyle verticalStyle = wb.createCellStyle();  
    this.setHSSFCellBorder(verticalStyle);  
    verticalStyle.setAlignment(HSSFCellStyle.ALIGN\_CENTER);// 设置单元格为水平对齐的类型  
    verticalStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL\_CENTER);  
    verticalStyle.setFont(songFont);

    // 建立新的sheet对象(excel的表单)  
    HSSFSheet sheet = wb.createSheet(excelFileName);  
    sheet.setColumnWidth(0,15\* 256);  
    sheet.setColumnWidth(1,15\* 256);  
    sheet.setColumnWidth(2,60\* 256);  
    sheet.setColumnWidth(3,15\* 256);

    sheet.addMergedRegion(new CellRangeAddress(0,1,0,3));  
    sheet.addMergedRegion(new CellRangeAddress(2,3,0,3));  
    sheet.addMergedRegion(new CellRangeAddress(4,5,0,0));  
    sheet.addMergedRegion(new CellRangeAddress(4,5,1,1));  
    sheet.addMergedRegion(new CellRangeAddress(4,5,2,2));  
    sheet.addMergedRegion(new CellRangeAddress(4,5,3,3));

    int beginRowIndex = 6;  
    int endRowIndex = 6;

    //要获总记录,下一步来确定合并的单元格的数量  
    List<TbCheckSamplEventReportVo> detailList = this.checkCountDao.getCheckResultDaily(checkEventCountDto);

    if (detailList != null && detailList.size() > 0) {  
        endRowIndex += detailList.size() -1;  
        log.info("detailList.size() " + detailList.size());  
    }  
    sheet.addMergedRegion(new CellRangeAddress(beginRowIndex,endRowIndex,0,0));

    int sumScore = 0;  
    for (int i = beginRowIndex; i <= endRowIndex; i++) {  
        int j = i - beginRowIndex;  
        sheet.addMergedRegion(new CellRangeAddress(i,i,1,3));  
        HSSFRow row = sheet.createRow(i);  
        if (i == beginRowIndex) {  
            HSSFCell problemTextCell = row.createCell(0);  
            problemTextCell.setCellValue("问题");  
            problemTextCell.setCellStyle(verticalStyle);  
        }

        StringBuilder contentDetail = new StringBuilder();  
        if (detailList != null && detailList.size() > 0) {  
            BigDecimal checkScore = detailList.get(j).getCheckScore() == null ? null : detailList.get(j).getCheckScore();  
            if (checkScore != null) {  
                sumScore += checkScore.intValue();  
            }  
            if (detailList.get(j).getPreParticipantName() != null) {  
                preParticipantNames.add(detailList.get(j).getPreParticipantName());  
            }

            contentDetail.append(j+1).append(".").append(detailList.get(j).getDesc()).append(" ").append("xxx").append(checkScore == null ? "" : checkScore.intValue())  
                    .append("xxx(").append(detailList.get(j).getCheckTypeName()).append(")");  
        }

        HSSFCell cell = row.createCell(1);  
        cell.setCellValue(contentDetail.toString());  
        cell.setCellStyle(contentDefaultStyle);

        HSSFCell cell2 = row.createCell(2);  
        cell2.setCellStyle(contentDefaultStyle);

        HSSFCell cell3 = row.createCell(3);  
        cell3.setCellStyle(contentDefaultStyle);

    }

    //合计  
    sheet.addMergedRegion(new CellRangeAddress(endRowIndex+1,endRowIndex+1,1,3));  
    //人员  
    sheet.addMergedRegion(new CellRangeAddress(endRowIndex+2,endRowIndex+2,1,3));

    HSSFRow row0 = sheet.createRow(0);  
    HSSFCell row0Cell0 = row0.createCell(0);  
    row0Cell0.setCellValue("xxxxxx");  
    row0Cell0.setCellStyle(songPoint22RedFontStyle);

    HSSFRow row1 = sheet.createRow(2);  
    HSSFCell row1Cell0 = row1.createCell(0);  
    row1Cell0.setCellValue(checkEventCountDto.getCompanyName());  
    row1Cell0.setCellStyle(rightBoldStyle);

    //5行  
    HSSFRow row2 = sheet.createRow(4);  
    HSSFCell row2Cell0 = row2.createCell(0);  
    row2Cell0.setCellStyle(style);

    HSSFCell row2Cell1 = row2.createCell(1);  
    row2Cell1.setCellStyle(style);

    HSSFCell row2Cell2 = row2.createCell(2);  
    row2Cell2.setCellStyle(style);  
    row2Cell2.setCellValue("时间");

    HSSFCell row2Cell3 = row2.createCell(3);  
    row2Cell3.setCellValue(checkTime);  
    row2Cell3.setCellStyle(arialFontStyle);

    //6行  
    HSSFRow row3 = sheet.createRow(5);  
    HSSFCell row3Cell0 = row3.createCell(0);  
    row3Cell0.setCellStyle(style);

    HSSFCell row3Cell1 = row3.createCell(1);  
    row3Cell1.setCellStyle(style);

    HSSFCell row3Cell2 = row3.createCell(2);  
    row3Cell2.setCellStyle(style);

    HSSFCell row3Cell3 = row3.createCell(3);  
    row3Cell3.setCellStyle(style);

    //xxxxx  
    HSSFRow row5 = sheet.createRow(endRowIndex+1);  
    HSSFCell row5Cell0 = row5.createCell(0);  
    row5Cell0.setCellValue("合计");  
    row5Cell0.setCellStyle(style);  
    HSSFCell row5Cell1 = row5.createCell(1);  
    row5Cell1.setCellValue(new StringBuilder("xx").append(sumScore).append("xxx").toString());  
    row5Cell1.setCellStyle(songPoint14FontStyle);  
    HSSFCell row5Cell2 = row5.createCell(2);  
    row5Cell2.setCellStyle(songPoint14FontStyle);  
    HSSFCell row5Cell3 = row5.createCell(3);  
    row5Cell3.setCellStyle(songPoint14FontStyle);

    //人员  
    HSSFRow row6 = sheet.createRow(endRowIndex+2);  
    HSSFCell row6Cell0 = row6.createCell(0);  
    row6Cell0.setCellValue("人员");  
    row6Cell0.setCellStyle(style);

    StringBuilder tmpNames = new StringBuilder();  
    if (preParticipantNames.size() > 0){  
        preParticipantNames.forEach(item -> tmpNames.append(item).append(","));  
    }  
    HSSFCell row6Cell1 = row6.createCell(1);  
    row6Cell1.setCellValue(tmpNames.toString().length() > 0 ? (tmpNames.toString().substring(0,tmpNames.toString().length() -1)) : "");  
    row6Cell1.setCellStyle(style);

    HSSFCell row6Cell2 = row6.createCell(2);  
    row6Cell2.setCellStyle(style);

    HSSFCell row6Cell3 = row6.createCell(3);  
    row6Cell3.setCellStyle(style);

    return wb;

  代码里面的问题:

1、关于cell的style可以使用for循环来做,代码更加简洁;

2、每列的宽度没有做子适应展开,现在四列是用了固定值来设置列宽的。

3、…