Ho bisogno di leggere file di Excel di grandi dimensioni e di importare i loro dati nella mia applicazione.Apache POI Streaming (SXSSF) per la lettura
Da POI occupa una grande quantità di memoria riservata al lavoro, spesso gettando OutOfMemory
errori, ho scoperto che esiste una Streaming API per la gestione di dati di Excel in modo seriale (piuttosto che caricare completamente i file in memoria)
ho creato una cartella di lavoro xlsx
, con un unico foglio di lavoro, e inserì diversi valori in celle e si avvicinò con il seguente codice per tentare di leggerlo:
public static void main(String[] args) throws Throwable {
SXSSFWorkbook wb = new SXSSFWorkbook(new XSSFWorkbook(new FileInputStream("C:\\test\\tst.xlsx"))); // keep 100 rows in memory, exceeding rows will be flushed to disk
SXSSFSheet sheet = (SXSSFSheet) wb.getSheetAt(0);
Row row = sheet.getRow(0);
//row is always null
while(row.iterator().hasNext()){ //-> NullPointerException
System.out.println(row.getCell(0).getStringCellValue());
}
}
Tuttavia, pur essendo in grado di ottenere i suoi fogli di lavoro correttamente, sempre viene fornito con righe vuote (null).
Ho ricercato e trovato diversi esempi dell'API Streaming in Internet, ma nessuno di essi è relativo a che legge i file esistenti, si tratta di generare file Excel.
È effettivamente possibile leggere i dati dai file esistenti .xlsx
in uno streaming?
Si sta utilizzando IDE Eclipse per questo? –
Sì, lo sono, perché? –
coz Ho una soluzione se vuoi aumentare lo spazio dell'heap. –