POI le permite leer archivos de Excel de forma continua. La API es una especie de envoltorio alrededor de SAX. Asegúrese de abrir el paquete OPC de la manera correcta, utilizando el constructor que toma una Cadena. De lo contrario, podría quedarse sin memoria inmediatamente.
OPCPackage pkg = OPCPackage.open(file.getPath());
XSSFReader reader = new XSSFReader(pkg);
Ahora, lector le permitirá obtener InputStreams
para las diferentes partes. Si quiere hacer el análisis XML usted mismo (usando SAX o StAX), puede usarlos. Pero requiere estar muy familiarizado con el formato.
Una opción más fácil es usar XSSFSheetXMLHandler. Aquí hay un ejemplo que lee la primera hoja:
StylesTable styles = reader.getStylesTable();
ReadOnlySharedStringsTable sharedStrings = new ReadOnlySharedStringsTable(pkg);
ContentHandler handler = new XSSFSheetXMLHandler(styles, sharedStrings, mySheetContentsHandler, true);
XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(handler);
parser.parse(new InputSource(reader.getSheetsData().next()));
Dónde mySheetsContentHandler debe ser su propia implementación de XSSFSheetXMLHandler.SheetContentsHandler. Esta clase se alimentará con filas y celdas.
Sin embargo, tenga en cuenta que esto puede consumir una cantidad moderada de memoria si la tabla de cadenas compartidas es enorme (lo que sucede si no tiene cadenas duplicadas en las hojas grandes). Si la memoria sigue siendo un problema, recomiendo usar las secuencias XML sin procesar (también proporcionadas por XSSFReader).
¿Lo está ejecutando desde IDE como eclipse? ¿Cómo establecieron las opciones de memoria? Creo que su configuración puede no efectuarse correctamente. –
sí, estoy usando eclipse IDE y realicé los siguientes cambios ... 1) En eclipse.ini edité el -Xmx256M a -Xmx-1024M 2) En ventana IDE-> Preferencias-> JRE-> Instalado -> agregado - Xms256M -Xmx1024M en argumentos VM por defecto. Creo que se pudo haber reflejado en el eclipse IDE – Avinash