Große Excel-Datei einlesen (POI)

Status
Nicht offen für weitere Antworten.

mknapp

Mitglied
Hallo,
ich möchte gerne mittels POI eine vorhandene Excel-Datei (10 MB groß, da sie bereits Grafiken etc. enthält) in Java einlesen, und derselben Datei Daten hinzufügen, diese also überschreiben. Beim einlesen tritt allerdings ein OutOfMemoryError auf (zu wenig heap space). Bei kleinen Excel-Dateien (ca.500 kB) funktioniert das mit folgendem Code:
Code:
import java.io.*;
import org.apache.poi.poifs.filesystem.*;
import org.apache.poi.hssf.usermodel.*;

public class ExcelTest {
 
    public static void main( String [] args ) {
    	
      try{
    	FileInputStream in = new FileInputStream("Bsp.xls");
        POIFSFileSystem fs = new POIFSFileSystem(in);
        HSSFWorkbook wb = new HSSFWorkbook(fs);
        HSSFSheet sheet = wb.getSheetAt(0);
        HSSFRow row = sheet.getRow(8);
        HSSFCell cell = row.createCell((short)0);

        cell.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell.setCellValue("a test");

        FileOutputStream fileOut = new FileOutputStream("Bsp.xls");
        wb.write(fileOut);
        in.close();
        fileOut.close();
      }
      catch(IOException e){
      }
    }
}

Gibt es eine Möglichkeit, im FileInputStream die Datei abschnittsweise bzw. ein einzelnes sheet einzeln einzulesen, um das Problem des unzureichenden heap-spaces zu umgehen? Ich will ja nur in einem sheet eine Datenliste hinzufügen, d.h. alle anderen sheets, die den Großteil der 10 MB ausmachen, interessieren mich nicht. Oder gibt es vll eine ganz andere Möglichkeit (anderer Programmcode), bei dem es nicht zu dem heap-space-Problem kommt? 10 MB ist doch soo viel auch wieder nicht, oder?

P.S.: Mit der Option -Xmx... beim Programmstart klappts übrigens nicht, auch wenn ich den Speicher noch so hoch setze.

Wäre für Tipps sehr dankbar!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben