xssfworkbook write poi ooxml librería descargar create java excel apache-poi

poi - write excel java



Altura del tamaño automático para filas en PDI de Apache (8)

// podemos usar el ancho de la columna para la hoja

Ex: sheet.setColumnWidth(0, 2000);

Estoy ingresando valores en una hoja de cálculo usando Apache POI. Estos valores tienen líneas nuevas, y pude usar este código exitosamente:

CellStyle style = cell.getCellStyle() style.setWrapText(true) cell.setCellStyle(style)

Lamentablemente, aunque el texto se ajusta correctamente, las filas no siempre crecen lo suficiente como para mostrar el contenido. ¿Cómo me aseguro de que mis filas tengan siempre la altura correcta?


La única forma en que logré que esto funcionara fue escribir mi propia implementación para calcular la altura de la fila. El código ahora se lanzó como el proyecto Taro , por lo que podría usar eso. Tiene numerosos métodos de conveniencia que le permiten escribir un archivo de Excel en muchas menos líneas de código.

Si prefiere colocar la implementación en su propio código, puede encontrarla en la clase SpreadsheetTab . Hay un método autoSizeRow (int rowIndex) a mitad de camino. Básicamente itera por la fila y para cada celda encuentra el número de líneas de texto, luego usa el tamaño de la fuente para calcular la altura óptima de la celda. Luego establece la altura de la fila a la altura de la celda más alta.


No puede ajustar la altura de la celda directamente. Pero puedes cambiar la altura de la fila

final HSSFSheet fs = wb.createSheet("sheet1"); final HSSFRow row0 = fs.createRow(0); final HSSFCell cellA1 = row0.createCell(0); row0.setHeight((short)700);


Trabajar en la fila a mi favor:

cell.getRow().setHeight((short)0);

Aquí 0 para calcular la altura automática.


Vea todo este enlace , que proporciona algún código para calcular manualmente la altura correcta para una fila, según el ancho de la columna y el contenido de la celda. No lo he probado personalmente. También pegado a continuación para mayor comodidad:

// Create Font object with Font attribute (e.g. Font family, Font size, etc) for calculation java.awt.Font currFont = new java.awt.Font(fontName, 0, fontSize); AttributedString attrStr = new AttributedString(cellValue); attrStr.addAttribute(TextAttribute.FONT, currFont); // Use LineBreakMeasurer to count number of lines needed for the text FontRenderContext frc = new FontRenderContext(null, true, true); LineBreakMeasurer measurer = new LineBreakMeasurer(attrStr.getIterator(), frc); int nextPos = 0; int lineCnt = 0; while (measurer.getPosition() < cellValue.length()) { nextPos = measurer.nextOffset(mergedCellWidth); // mergedCellWidth is the max width of each line lineCnt++; measurer.setPosition(nextPos); } Row currRow = currSht.getRow(rowNum); currRow.setHeight((short)(currRow.getHeight() * lineCnt)); // The above solution doesn''t handle the newline character, i.e. "/n", and only // tested under horizontal merged cells.


HSSFWorkbook workbook=new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("FirstSheet"); HSSFRow rowhead= sheet.createRow((short)0); HSSFCellStyle style = workbook.createCellStyle(); style.setWrapText(true); row.setRowStyle(style); row.getCell(0).setCellStyle(style);

El código anterior generará altura dinámica de filas.


currentRow.setHeight((short)-1)

Funciona para XSSFCell y Excel 2013


short getRowHeight(Row row, String cellValue, Font font, float cellWidth) { if(cellValue.isEmpty()) return row.getHeight(); // Create Font object with Font attribute (e.g. Font family, Font size, etc) for calculation int style = java.awt.Font.PLAIN; if(font.getBoldweight() == Font.BOLDWEIGHT_BOLD) style = java.awt.Font.BOLD; java.awt.Font currFont = new java.awt.Font(font.getFontName(), style, font.getFontHeight()); double requiredWidth = currFont.getStringBounds(cellValue, new FontRenderContext(currFont.getTransform(), false, false)).getBounds().getWidth(); return (short) Math.ceil(font.getFontHeight() * requiredWidth / cellWidth); // The above solution doesn''t handle the newline character, i.e. "/n", and only for row having merged cells. }