Pregunta Apache POI Excel: ¿cómo configurar columnas para expandir?


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

El problema al que me enfrento es cuando se crea y abre la hoja de cálculo, las columnas no se expanden, por lo que algunos textos largos como el texto con formato de fecha no se muestran 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 quiera hacerlo manualmente cada vez que abra la hoja de cálculo :(

Me enteré (aunque podría ser un método equivocado) groupRow() y setColumnGroupCollapsed() podría ser capaz de hacer el truco pero sin 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, la cadena "Looooooong texte to not a first" está en la celda, pero como la columna no está expandida, solo aparece "Loooooooo".

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


73
2018-01-06 01:36


origen


Respuestas:


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

Aquí hay un enlace a la API.

Ver esta publicación para más referencia Problema al ajustar el tamaño de celda excel al tamaño del contenido cuando se usa apache poi


137
2018-01-06 06:05



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

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


38
2018-03-13 07:06



Si desea ajustar automáticamente todas las columnas de un libro, aquí hay un método que puede 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(0);
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                int columnIndex = cell.getColumnIndex();
                sheet.autoSizeColumn(columnIndex);
            }
        }
    }
}

21
2018-02-10 19:56



Para POI de Excel:

sheetName.autoSizeColumn(cellnum); 

8
2018-04-01 20:58



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 hoja y su ancho Pero, las unidades de ancho son bastante pequeñas, puedes probar 4000 por ejemplo.


6
2018-01-06 05:45



código de muestra debajo

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);

// argumento debe ser número de celda

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

Comprueba la salida y vete loco :)


4
2017-12-13 15:08



Si conoce el recuento de sus columnas (es decir, es igual a una lista de recopilación). Simplemente puede usar este delineador para ajustar todas las columnas de una hoja (si usa al menos java 8):

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

1
2017-11-08 11:32



Es muy simple, usa este código de una línea dataSheet.autoSizeColumn (0)

o da el número de columna entre corchetes dataSheet.autoSizeColumn (número de celda)


0
2017-10-06 16:10