El estilo de PDI de Apache se aplica a todas las celdas

    Cell cell = row.createCell(1);
    cell.setCellValue(rdf.getEffectiveDate());
    cell.getCellStyle().setDataFormat(HSSFDataFormat.getBuiltinFormat("d-mmm-yy"));

    cell = row.createCell(2);
    cell.setCellValue(rdf.getExpiryDate());
    cell.getCellStyle().setDataFormat(HSSFDataFormat.getBuiltinFormat("d-mmm-yy"));

    row.createCell(3).setCellValue(rdf.getPremium());
    row.createCell(4).setCellValue(rdf.getAccountNumber());
    row.createCell(5).setCellValue(rdf.getLedgerName());

Quería aplicar el formato de fecha en dos de las columnas anteriores. Pero se está aplicando a todas las células. ¿Cómo puedo prevenir esto?

Respuesta 1

Como dice la documentación, Cell.getCellStyle () nunca devolverá nulo.

https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Cell.html#getCellStyle ()

Cuando no se ha establecido explícitamente un estilo de celda para una Celda, devolverá el estilo de celda predeterminado que se comparte inicialmente entre todas las celdas del libro de trabajo. Cambiar esto entonces obviamente afectará a todas las celdas que no tengan un estilo explícitamente asignado.

Debe crear un nuevo CellStyle y luego asignarlo a las celdas relevantes.

De la guía para desarrolladores de PDI:

https://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells

Workbook wb = new HSSFWorkbook();
    //Workbook wb = new XSSFWorkbook();
    CreationHelper createHelper = wb.getCreationHelper();
    Sheet sheet = wb.createSheet("new sheet");

    // Create a row and put some cells in it. Rows are 0 based.
    Row row = sheet.createRow(0);

    // Create a cell and put a date value in it.  The first cell is not styled
    // as a date.
    Cell cell = row.createCell(0);
    cell.setCellValue(new Date());

    // we style the second cell as a date (and time).  It is important to
    // create a new cell style from the workbook otherwise you can end up
    // modifying the built in style and effecting not only this cell but other cells.
    CellStyle cellStyle = wb.createCellStyle();
    cellStyle.setDataFormat(
        createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
    cell = row.createCell(1);
    cell.setCellValue(new Date());
    cell.setCellStyle(cellStyle);

    //you can also set date as java.util.Calendar
    cell = row.createCell(2);
    cell.setCellValue(Calendar.getInstance());
    cell.setCellStyle(cellStyle);

    // Write the output to a file
    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    wb.write(fileOut);
    fileOut.close();
Respuesta: 2

Intenta crear un nuevo estilo de celda. Creo que puede estar cambiando el estilo predeterminado. Entonces algo como esto ...

CellStyle dateTimeCS = wb.createCellStyle();
dateTimeCS.setDataFormat(HSSFDataFormat.getBuiltinFormat("d-mmm-yy"));
cell.setCellStyle(dateTimeCS);
Respuesta: 3

Estoy buscando una forma de tomar expresiones de reemplazo de sed, como s / hello / world / (es decir, reemplazar todas las instancias de 'hello' con 'world') y aplicarlas a una cadena de Java. Idealmente me gustaría ...

Acabo de instalar el complemento ecobertura, pero parece que no es una herramienta muy fácil de usar desde dentro de eclipse. ¿hay algún buen complemento para cobertura en eclipse o un artículo para describir cómo usar ecobertura? ...

Quiero generar una cadena JSON en la siguiente estructura usando Jackson API (JsonFactory, JsonGenerator). Cómo puedo hacerlo ? Esperado: {"api": {"Salutaion": "Mr", "name": "X" ...

Si tengo una clase que usa un tipo genérico, como la clase pública Record <T> {valor T privado; Registro público (valor T) {this.value = value; }} es bastante sencillo ...