Pregunta

estoy usando Apache POI API para generar excel spreadsheet para generar algunos datos.

El problema que me enfrento es cuando se crea y abre la hoja de cálculo, las columnas no se expanden para que un texto de texto largo como el texto formateado no aparezca a primera vista.

Podría hacer doble clic en el borde de la columna en Excel para expandir o arrastrar el borde para ajustar el ancho de la columna, pero podría haber más de 20 columnas y no hay forma de que quiero hacerlo manualmente cada vez que abro la hoja de cálculo :(

Descubrí (aunque podría ser un método equivocado) groupRow() y setColumnGroupCollapsed() podría ser capaz de hacer el truco pero no hay suerte. Tal vez lo estoy usando de manera incorrecta.

Fragmento de código de muestra

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

        //not really working yet.... :(
        //set group for expand/collapse
        //sheet.groupRow(0, 10); //just random fromRow toRow argument values...
        //sheet.setColumnGroupCollapsed(0, true);

        //create row
        Row row = sheet.createRow((short)0);
        //put a cell in the row and store long text data
        row.createCell(0).setCellValue("Loooooooong text not to show up first");

Cuando se crea esta hoja de cálculo, el "texto de no aparecer primero", la cadena está en la celda, pero como la columna no se expande, solo se está apareciendo "Loooooooo".

¿Cómo puedo configurarlo para que cuando abra mi hoja de cálculo, la columna ya está expandida?

¿Fue útil?

Solución

Después ha agregado todos sus datos a la hoja, puede llamar autoSizeColumn(int column) en su hoja para enfocar automáticamente las columnas al tamaño adecuado

Aquí hay un enlace al API.

Vea esta publicación para más referenciaProblema al ajustar el tamaño de la celda de Excel al tamaño del contenido cuando se usa Apache POI

Otros consejos

Consejo : Para hacer que el tamaño automático funcione, la llamada a sheet.autoSizeColumn(columnNumber) debería hacerse después Popular los datos en el Excel.

Llamar al método antes de poblar los datos no tendrá ningún efecto.

Si desea tamaño automático todas las columnas en un libro de trabajo, aquí hay un método que podría ser útil:

public void autoSizeColumns(Workbook workbook) {
    int numberOfSheets = workbook.getNumberOfSheets();
    for (int i = 0; i < numberOfSheets; i++) {
        Sheet sheet = workbook.getSheetAt(i);
        if (sheet.getPhysicalNumberOfRows() > 0) {
            Row row = sheet.getRow(sheet.getFirstRowNum());
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                int columnIndex = cell.getColumnIndex();
                sheet.autoSizeColumn(columnIndex);
            }
        }
    }
}

Para Excel Poi:

sheetName.autoSizeColumn(cellnum); 

Puedes probar algo como esto:

HSSFSheet summarySheet = wb.createSheet();
summarySheet.setColumnWidth(short column, short width);

Aquí los parámetros son: número de columna en la hoja y su ancho, pero las unidades de ancho son bastante pequeñas, puede probar 4000, por ejemplo.

Código de muestra a continuación

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("your sheet name");
HSSFRow row = sheet.createRow(0);

cell = row.createCell(0);
cell.setCellValue("A BIG NAME WITH AUTO SIZE FEATURE ENABLED");

// Esto es crucial

sheet.autoSizeColumn(0);

// El argumento debe ser el número de celda

cell = row.createCell(1);
cell.setCellValue("a big name without auto size feature enabled");

Verifique la salida y vuelva a las nueces :)

Si conoce el recuento de sus columnas (FE es igual a una lista de cobranza). Simplemente puede usar este revestimiento para ajustar todas las columnas de una hoja (si usa al menos Java 8):

IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));

Es muy simple, use esta hoja de datos de código de línea. AUTOSIZECOLUMN (0)

o dar el número de columna en la hoja de datos del soporte. AUTOSIZECOLUMN (número de celda)

También puedes envolver el texto. Código de muestra de PFB:

CellStyle wrapCellStyle = new_workbook.createCellStyle();
                    wrapCellStyle.setWrapText(true);

Puedes usar setColumnWidth() Si desea expandir más su celda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top