2010-07-02 7 views
1

J'utilise JXL pour écrire un fichier Excel de 50000 lignes et 30 colonnes. Mon code ressemble à ceci:JAVA - Erreur de mémoire insuffisante lors de l'écriture de cellules Excel en jxl

for (int j = 0; j < countOfRows; j ++) {

myWritableSheet.addCell(new Label(0, j, myResultSet.getString(1), myWritableCellFormat)); 

myWritableSheet.addCell(new Label(1, j, myResultSet.getString(2), myWritableCellFormat)); 

..... 

..... 

}

Tout en écrivant les cellules, le programme va plus lent et plus lent

et enfin autour de la rangée 25000 Je reçois l'erreur suivante:

Exception dans le thread " Discussion-3" java.lang.OutOfMemoryError: Java espace de tas à jxl.write.biff.WritableSheetImpl.getRowRecord (WritableSheetImpl.java:984) à jxl.write.biff.WritableSheetImpl.addCell (WritableSheetImpl.java:951) à KLL.ConverterMainFrame $ exportToXLSBillRightsThread.run (ConverterMainFrame.java:6895)

Il est toujours difficile en Java de gérer la mémoire.

Dans ce cas, il semble que ce soit le problème de jxl.

Existe-t-il un moyen d'écrire le fichier, d'effacer la mémoire et de coninuer des cellules d'écriture toutes les 1000 cellules?

Est-ce que ce serait une bonne idée ou quoi d'autre proposeriez-vous comme solution?

Répondre

1

Élever la mémoire disponible pour la machine virtuelle (avec -Xms et -Xmx) n'est pas une option?

5

Le JExcel FAQ a quelques suggestions, y compris l'idée de Curtis ci-dessus.

Si cela ne vous dérange pas le coup de performance, vous pouvez utiliser un temporary file instead of doing it all in memory.

WorkbookSettings s = new WorkbookSettings(); 
s.setUseTemporaryFileDuringWrite(true); 
WritableWorkbook ws = Workbook.createWorkbook(new File("someFile.xls"),s); 
+0

Je ne trouve pas setUseTemporaryFileDuringWrite dans l'objet WorkbookSettings. Quelle version de jxl avez-vous? (Voir une réponse que j'ai posté ci-dessous pour plus d'informations) –

+2

@Stefanos, selon les javadocs, il semble que cette fonctionnalité est disponible dans verison> = 2.6.9 – Mark

Questions connexes