Apache POI autoSizeColumn redimensionne la largeur minimum

Lorsque l'on travaille avec des valeurs qui sont des formules, je vais avoir de la difficulté à obtenir les colonnes de autoresize correctement.

J'ai "résolu" en faisant un caché ligne qui a des valeurs maximales que les constantes de chaînes de valeurs, mais qui est loin d'être élégant et nécessite souvent l'évaluation de l'formules dans chaque cellule pour obtenir le plus grand des chaînes de caractères qui sont générés. Alors que ce genre de travaux pour une petite feuille de calcul, il devient très peu pratique pour les feuilles qui sont ~16 colonnes x ~6000 lignes.

Le code suivant rend comme dans OpenOffice.

Apache POI autoSizeColumn redimensionne la largeur minimum

package com.shagie.poipoc;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;

public class SimpleBug {
    public static void main(String[] args) {
        try {

            Workbook wb = new HSSFWorkbook();
            FileOutputStream fileOut = new FileOutputStream("workbook.xls");
            Sheet sheet = wb.createSheet("new sheet");

            Row row = sheet.createRow(0);
            CellStyle style = wb.createCellStyle();
            style.setDataFormat(wb.createDataFormat().getFormat("[h]:mm"));
            Cell cell = row.createCell(0);
            cell.setCellValue(123.12);
            cell.setCellStyle(style);

            row.createCell(1).setCellFormula("A1");

            row.createCell(2)
              .setCellFormula("TRUNC(A1) & \"d \" & TRUNC(24 * MOD(A1,1))" +
              " & \"h \" & TRUNC(MOD(60 * 24 * MOD(A1,1),60)) & \"m\"");

            row.createCell(3).setCellValue("foo");

            for(int i = 0; i < 4; i++) {
                sheet.autoSizeColumn(i);
            }

            wb.write(fileOut);
            fileOut.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

Liées, et essayé:

Apache POI autoSizeColumn Redimensionne de manière Incorrecte J'ai essayé de la police dans le style. J'ai une liste de toutes les polices de Java, a été conscients de

GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
for(String font:e.getAvailableFontFamilyNames()) {
    System.out.println(font);
}

J'ai essayé plusieurs polices répertoriées avec cette boucle, et alors que OpenOffice changé la police, les colonnes, où encore de taille incorrecte.

OriginalL'auteur | 2014-01-04