poi复制行

 工作中遇到导出模板excel, 需要复制行, 参考大神写的改成了自己需要的。参考来源https://blog.csdn.net/qq_27653263/article/details/78721310

public static void copyRow(Workbook wb, Sheet sheet, Row sourceRow, Row distRow, boolean isCopyValue){
    //设置高度 
    distRow.setHeight(sourceRow.getHeight()); 
    //复制合并的单元格 
    for(int i=0; i < sheet.getNumMergedRegions(); i++){ 
        CellRangeAddress sourceRange = sheet.getMergedRegion(i);        
        if(sourceRange.getFirstRow() == sourceRow.getRowNum()){ 
            CellRangeAddress distRange = new CellRangeAddress(distRow.getRowNum(),
                distRow.getRowNum()+(sourceRange.getLastRow()-sourceRange.getFirstRow()), 
                sourceRange.getFirstColumn(), sourceRange.getLastColumn()); 
                sheet.addMergedRegion(distRange); 
        } 
    } 
    //复制单元格 
    for(int i=0; i < sourceRow.getLastCellNum(); i++){ 
        copyCell(wb, sourceRow.getCell(i), distRow.createCell(i), isCopyValue); 
    } 
} 

private static void copyCell(Workbook wb, Cell sourceCell, Cell distCell, boolean isCopyValue) { 
    //复制样式 
    /*
     * 数据量太多时createcellstyle会报错, 不能超过4000
     */
    //CellStyle distStyle = wb.createCellStyle(); 
    //distStyle.cloneStyleFrom(sourceCell.getCellStyle());     
    distCell.setCellStyle(sourceCell.getCellStyle()); 
    //评论 
    if(sourceCell.getCellComment() != null){ 
        distCell.setCellComment(sourceCell.getCellComment()); 
    } 
    //数据格式 
    int sourceCellType = sourceCell.getCellType(); 
    distCell.setCellType(sourceCellType); 
    //复制数据 
    if(isCopyValue){ 
        switch (sourceCellType){ 
            case Cell.CELL_TYPE_NUMERIC: 
                if(DateUtil.isCellDateFormatted(sourceCell)){
                    distCell.setCellValue(sourceCell.getDateCellValue()); 
                }else { 
                    distCell.setCellValue(sourceCell.getNumericCellValue()); 
                } 
                break; 
            case Cell.CELL_TYPE_STRING: 
                distCell.setCellValue(sourceCell.getRichStringCellValue()); 
                break; 
            case Cell.CELL_TYPE_BOOLEAN: 
                distCell.setCellValue(sourceCell.getBooleanCellValue()); 
                break; 
            case Cell.CELL_TYPE_ERROR: 
                distCell.setCellValue(sourceCell.getErrorCellValue()); 
                break; 
            case Cell.CELL_TYPE_FORMULA: 
                distCell.setCellValue(sourceCell.getCellFormula()); 
                break; 
            default: 
                break; 
        } 
    } 
}

 

你可能感兴趣的:(poi复制行)