Java 如何使用ApachePOI删除大型xls/xlsx文件中的行
我试图删除xlsx文件第二页和第三页的第一行,但是对于大文件,我会遇到Java热空间异常或GC开销 我正在使用ApachePOI,我不知道如何使用XSSF和SAX 我的实际代码如下:Java 如何使用ApachePOI删除大型xls/xlsx文件中的行,java,excel,apache-poi,xlsx,xls,Java,Excel,Apache Poi,Xlsx,Xls,我试图删除xlsx文件第二页和第三页的第一行,但是对于大文件,我会遇到Java热空间异常或GC开销 我正在使用ApachePOI,我不知道如何使用XSSF和SAX 我的实际代码如下: public boolean deleteRow(String sheetName、String excelPath、int rowNo)引发异常{ XSSF工作簿=空; XSSFSheet=null; 试一试{ 文件文件=新文件(excelPath); 工作簿=新XSSF工作簿(文件); sheet=工作簿.ge
public boolean deleteRow(String sheetName、String excelPath、int rowNo)引发异常{
XSSF工作簿=空;
XSSFSheet=null;
试一试{
文件文件=新文件(excelPath);
工作簿=新XSSF工作簿(文件);
sheet=工作簿.getSheet(sheetName);
如果(工作表==null){
返回false;
}
int lastRowNum=sheet.getLastRowNum();
如果(rowNo>=0&&rowNo
事情就是这样
Cleaning up unclosed ZipFile for archive C:\temp\Report_XXXX.xlsx
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Caused by: org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[ID-DESKTOP-HPUQAQ7-1568621807670-2-1]
at org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1842)
at org.apache.camel.impl.DefaultExchange.setException(DefaultExchange.java:385)
at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:275)
at org.apache.camel.component.bean.AbstractBeanProcessor.process(AbstractBeanProcessor.java:198)
at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:53)
at org.apache.camel.component.bean.BeanProducer.process(BeanProducer.java:41)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:76)
at org.apache.camel.processor.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:186)
at org.apache.camel.processor.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:86)
at org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:541)
at org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:506)
at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:369)
at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:506)
at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:229)
at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:144)
at org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:161)
at org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:168)
at it.carrefour.faat.RunFaatBatch.main(RunFaatBatch.java:26)
... 8 more
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOfRange(Arrays.java:3664)
at java.lang.String.<init>(String.java:207)
at com.sun.org.apache.xerces.internal.xni.XMLString.toString(XMLString.java:188)
at com.sun.org.apache.xerces.internal.util.XMLAttributesImpl.getValue(XMLAttributesImpl.java:524)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser$AttributesProxy.getValue(AbstractSAXParser.java:2321)
at org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3198)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2784)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3414)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1272)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1259)
at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
at org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument$Factory.parse(Unknown Source)
at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:228)
at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:220)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.parseSheet(XSSFWorkbook.java:452)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:417)
at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:184)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:286)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:323)
at it.carrefour.faat.jasperreport.JasperReportFill.deleteRow(JasperReportFill.java:106)
at it.carrefour.faat.jasperreport.JasperReportFill.generateReport(JasperReportFill.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
清理归档文件C:\temp\Report_XXXX.xlsx的未关闭ZipFile
线程“main”java.lang.reflect.InvocationTargetException中出现异常
在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.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
位于org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
位于org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
位于org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
原因:org.apache.camel.CamelExecutionException:在exchange上执行时发生异常:exchange[ID-DESKTOP-HPUQAQ7-1568621807670-2-1]
位于org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1842)
位于org.apache.camel.impl.DefaultExchange.setException(DefaultExchange.java:385)
在org.apache.camel.component.bean.MethodInfo$1.procedure上(MethodInfo.java:275)
位于org.apache.camel.component.bean.AbstractBeanProcessor.process(AbstractBeanProcessor.java:198)
位于org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:53)
位于org.apache.camel.component.bean.BeanProducer.process(BeanProducer.java:41)
位于org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
位于org.apache.camel.processor.RedeliveryRorHandler.process(RedeliveryRorHandler.java:548)
位于org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
位于org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
位于org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:76)
位于org.apache.camel.processor.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:186)
位于org.apache.camel.processor.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:86)
位于org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:541)
在org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:506)
位于org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:369)
位于org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:506)
位于org.apache.camel.impl.ProducerCache.send(ProducerCache.java:229)
位于org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:144)
位于org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:161)
位于org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:168)
at it.carrefour.faat.RunFaatBatch.main(RunFaatBatch.java:26)
... 8个以上
原因:java.lang.OutOfMemoryError:超出GC开销限制
位于java.util.Arrays.copyOfRange(Arrays.java:3664)
位于java.lang.String。(String.java:207)
位于com.sun.org.apache.xerces.internal.xni.XMLString.toString(XMLString.java:188)
在com.sun.org.apache.xerces.internal.util.XMLAttributesImpl.getValue上(XMLAttributesImpl.java:524)
位于com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser$AttributeProxy.getValue(AbstractSAXParser.java:2321)
位于org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3198)
位于com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2784)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842)
位于com.sun.org.apache.xerces.internal.parsers.XML11Config