У меня есть файл Excel, который служит шаблоном для моей программы. Размер этого файла шаблона составляет около 26 МБ. Я пытаюсь открыть файл для записи с помощью этого кода:
Workbook workbook = new SXSSFWorkbook(new XSSFWorkbook(new File(getClass().getResource(TEMPLATE_PATH).getFile())),
100, true, true);
Это, однако, вызывает следующее исключение:
java.lang.OutOfMemoryError: превышен предел накладных расходов GC при
org.apache.xmlbeans.impl.store.Cur $ CurLoadContext.attr (Cur.java:3039)
в org.apache.xmlbeans.impl.store.Locale.loadNode (Locale.java:1433)
в
org.apache.xmlbeans.impl.store.Locale.loadNodeChildren (Locale.java:1396)
в org.apache.xmlbeans.impl.store.Locale.loadNode (Locale.java:1438)
в
org.apache.xmlbeans.impl.store.Locale.loadNodeChildren (Locale.java:1396)
в org.apache.xmlbeans.impl.store.Locale.loadNode (Locale.java:1438)
в
org.apache.xmlbeans.impl.store.Locale.loadNodeChildren (Locale.java:1396)
в org.apache.xmlbeans.impl.store.Locale.loadNode (Locale.java:1438)
в
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject (Locale.java:1378)
в
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject (Locale.java:1363)
в
org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse (SchemaTypeLoaderBase.java:370)
в org.apache.poi.POIXMLTypeLoader.parse (POIXMLTypeLoader.java:164)
в
org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument $ Factory.parse (Неизвестно
Источник) в
org.apache.poi.xssf.usermodel.XSSFSheet.read (XSSFSheet.java:226) в
org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead (XSSFSheet.java:218)
в
org.apache.poi.xssf.usermodel.XSSFWorkbook.parseSheet (XSSFWorkbook.java:443)
в
org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead (XSSFWorkbook.java:408)
в org.apache.poi.POIXMLDocument.load (POIXMLDocument.java:169) в
org.apache.poi.xssf.usermodel.XSSFWorkbook. (XSSFWorkbook.java:270)
в
org.apache.poi.xssf.usermodel.XSSFWorkbook. (XSSFWorkbook.java:323)
в
com.company.project.writer.excel.AirlinesMasterWriter. (AirlinesMasterWriter.java:70)
в
com.company.project.business.controller.impl.DiioBCImpl.writeAirlinesMasterFile (DiioBCImpl.java:141)
в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в
sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
в
sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:498) в
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection (AopUtils.java:333)
в
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint (ReflectiveMethodInvocation.java:190)
в
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:157)
в
org.springframework.transaction.interceptor.TransactionInterceptor $ 1.proceedWithInvocation (TransactionInterceptor.java:99)
в
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction (TransactionAspectSupport.java:280)
в
org.springframework.transaction.interceptor.TransactionInterceptor.invoke (TransactionInterceptor.java:96)
Как правильно писать в такие большие файлы Excel с помощью Apache Poi?
Обратите внимание, что я извлекаю все данные, которые мне нужно записать в шаблон, прежде чем открывать шаблон. Размер данных не более 300 МБ, скорее всего меньше. Также обратите внимание, что остальная часть моего кода работает нормально, если я создаю новый SXSSFWorkbook
вместо открытия существующего.