Je travaille sur un grand fichier CSV (~ 200 mb de fichier texte) que je voudrais convertir en feuille Excel, mais le classeur devient si consommateur de mémoire qu'au milieu du processus, Java jette "GC Overhead limite dépassé"! J'ai vérifié le code si je produis des références factices mais je pense qu'il n'en existe aucune. À mon avis, ces appels de bibliothèque de Apachi - POI peuvent générer des références qui maintiennent garbage collector si occupé. Ma question est de savoir si je pourrais simplement écrire le classeur dans un bloc de fichier par morceau comme un fichier texte quelque chose comme l'ajout à un fichier texte sans le mettre en mémoire. Y a-t-il une solution à cela ou est-ce que je manque quelque chose ici?Conversion de grandes données en Excel dans POI Apachi
GC jette l'exception dans le code suivant:
private void updateExcelWorkbook(String input, String fileName, Workbook workbook) {
try {
Sheet sheet = workbook.createSheet(fileName);
// Create a new font and alter it.
Font font = workbook.createFont();
font.setFontHeightInPoints((short) 11);
font.setBold(true);
// Fonts are set into a style so create a new one to use.
CellStyle style = workbook.createCellStyle();
style.setFont(font);
Row row;
Cell cell;
String[] columns;
String[] lines = input.split("\n");
int colIndex;
int rowIndex = 1;
for (String line : lines) {
row = sheet.createRow(rowIndex++);
columns = line.split("\t");
colIndex = 0;
for (String column: columns) {
cell = row.createCell(colIndex++);
if (rowIndex == 1)
cell.setCellStyle(style);
cell.setCellValue(column);
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
Mec, tu sauvé ma vie! Cela fonctionne comme un charme. Résultat beaucoup plus rapide sans problème mais le fichier Excel qui en résulte est un peu plus grand que celui créé par le classeur XSSF dont je me fiche! ;) –