Clone Row en Apache Poi

Esta función es una adaptación del Clonado de Rows en Apache Poi que pueden encontrar en stackoverflow pueden ver las referencias aquí.

La diferencia es que utilice las interfaces en los parámetros de la función para que aplique a los distintos tipos de workbooks y en lugar de retornar void retorno la fila copiada, para que se pueda manipular en caso que sea necesario.

private static Row copyRow(Workbook workbook, Sheet worksheet, int sourceRowNum, int destinationRowNum)
{
    // Get the source / new row
    Row newRow = worksheet.getRow(destinationRowNum);
    Row sourceRow = worksheet.getRow(sourceRowNum);
 
    // If the row exist in destination, push down all rows by 1 else create a new row
    if (newRow != null)
    {
        worksheet.shiftRows(destinationRowNum, worksheet.getLastRowNum(), 1);
    }
    else
    {
        newRow = worksheet.createRow(destinationRowNum);
    }
 
    // Loop through source columns to add to new row
    for (int i = 0; i < sourceRow.getLastCellNum(); i++)
    {
        // Grab a copy of the old/new cell
        Cell oldCell = sourceRow.getCell(i);
        Cell newCell = newRow.createCell(i);
 
        // If the old cell is null jump to next cell
        if (oldCell == null)
        {
            newCell = null;
            continue;
        }
 
        // Copy style from old cell and apply to new cell
        CellStyle newCellStyle = workbook.createCellStyle();
        newCellStyle.cloneStyleFrom(oldCell.getCellStyle()); ;
        newCell.setCellStyle(newCellStyle);
 	 
        // Set the cell data type
        newCell.setCellType(oldCell.getCellType());
 
        // Set the cell data value
        switch (oldCell.getCellType())
        {
            case HSSFCell.CELL_TYPE_BLANK:
                newCell.setCellValue(oldCell.getStringCellValue());
                break;
            case HSSFCell.CELL_TYPE_FORMULA:
                newCell.setCellFormula(oldCell.getCellFormula());
                //Si tenemos que modificar la formulario lo podemos hacer como string
                //oldCell.getCellFormula().replace("A"+sourceRowNum, "A"+destinationRowNum)
                break;
            case HSSFCell.CELL_TYPE_NUMERIC:
                newCell.setCellValue(oldCell.getNumericCellValue());
                break;
            case HSSFCell.CELL_TYPE_STRING:
                newCell.setCellValue(oldCell.getRichStringCellValue());
                break;
        }
    }	

    //..
    //..
    return newRow;
}

 

El llamado

Row newRow=copyRow(wb, sheet, 1, 2);
newRow.getCell(0).setCellValue("SobreEscriboValor");

Referencias:

Recent Posts

Leave a Comment