Apache Poi Excel: ¿cómo configurar columnas para expandir?
-
25-09-2019 - |
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?
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.