如何使用java拆分Excel文件?
我有200000行的Excel工作表。我想为每50000条记录拆分Excel文件。 我正在使用Apache POI API读取和写入Excel文件。如果行数达到定义的记录大小,是否可以拆分文件。请帮助我获取该问题的解决方案 代码: 发生异常:如何使用java拆分Excel文件?,java,excel,apache-poi,Java,Excel,Apache Poi,我有200000行的Excel工作表。我想为每50000条记录拆分Excel文件。 我正在使用Apache POI API读取和写入Excel文件。如果行数达到定义的记录大小,是否可以拆分文件。请帮助我获取该问题的解决方案 代码: 发生异常: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at org.apache.xmlbeans.impl.store.Locale$ScrubBuffer.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.apache.xmlbeans.impl.store.Locale$ScrubBuffer.<init>(Locale.java:1885)
at org.apache.xmlbeans.impl.store.Locale.getScrubBuffer(Locale.java:1904)
at org.apache.xmlbeans.impl.store.Xobj.getValueAsString(Xobj.java:1205)
at org.apache.xmlbeans.impl.store.Xobj.fetch_text(Xobj.java:1796)
at org.apache.xmlbeans.impl.values.XmlObjectBase.get_wscanon_text(XmlObjectBase.java:1332)
at org.apache.xmlbeans.impl.values.XmlObjectBase.check_dated(XmlObjectBase.java:1269)
at org.apache.xmlbeans.impl.values.JavaLongHolder.longValue(JavaLongHolder.java:53)
at org.apache.xmlbeans.impl.values.XmlObjectBase.getLongValue(XmlObjectBase.java:1502)
at org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTRowImpl.getR(Unknown Source)
at org.apache.poi.xssf.usermodel.XSSFRow.getRowNum(XSSFRow.java:321)
at org.apache.poi.xssf.usermodel.XSSFSheet.initRows(XSSFSheet.java:180)
at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:147)
at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:134)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:235)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:190)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:189)
at com.arosys.excelReading.ReadXLSX.loadFile(ReadXLSX.java:49)
at com.arosys.excelReading.ReadXLSX.getNumberOfSheet(ReadXLSX.java:121)
at com.arosys.excelReading.ReadXLSX.main(ReadXLSX.java:324)
Java Result: 1
线程“main”java.lang.OutOfMemoryError中的异常:java堆空间
位于org.apache.xmlbeans.impl.store.Locale$scrwabuffer.(Locale.java:1885)
位于org.apache.xmlbeans.impl.store.Locale.getScrubBuffer(Locale.java:1904)
位于org.apache.xmlbeans.impl.store.Xobj.getValueAsString(Xobj.java:1205)
位于org.apache.xmlbeans.impl.store.Xobj.fetch_text(Xobj.java:1796)
位于org.apache.xmlbeans.impl.values.XmlObjectBase.get_wscanon_text(XmlObjectBase.java:1332)
位于org.apache.xmlbeans.impl.values.XmlObjectBase.check_日期(XmlObjectBase.java:1269)
位于org.apache.xmlbeans.impl.values.JavaLongHolder.longValue(JavaLongHolder.java:53)
位于org.apache.xmlbeans.impl.values.XmlObjectBase.getLongValue(XmlObjectBase.java:1502)
位于org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTRowImpl.getR(未知源)
位于org.apache.poi.xssf.usermodel.XSSFRow.getRowNum(XSSFRow.java:321)
位于org.apache.poi.xssf.usermodel.XSSFSheet.initRows(XSSFSheet.java:180)
位于org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:147)
位于org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:134)
在org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:235)上
在org.apache.poi.POIXMLDocument.load上(POIXMLDocument.java:190)
位于org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:189)
在com.arosys.excelReading.ReadXLSX.loadFile(ReadXLSX.java:49)上
在com.arosys.excelReading.ReadXLSX.getNumberOfSheet上(ReadXLSX.java:121)
在com.arosys.excelReading.ReadXLSX.main上(ReadXLSX.java:324)
Java结果:1
谢谢如果您无法使用POI阅读此文档,但表格很简单,我建议您使用Excel打开它,将其另存为CSV文件,然后将此文件拆分为多个片段。这甚至可以使用shell脚本/批处理文件来完成
如果您有一个大文件并且必须拆分它,则此建议有效。但是,如果您正在实施一项应接收此类excel文件并将其分离的服务,请寻找其他解决方案。如果您无法使用POI阅读此文档,但表格很简单,我建议您使用excel打开它,将其另存为CSV文件,然后将此文件分离为片段。这甚至可以使用shell脚本/批处理文件来完成
如果您有一个大文件并且必须拆分它,则此建议有效。但是,如果您正在实现一个应该接收此类excel文件并将其分离的服务,请寻找其他解决方案。默认Java堆大小非常小,尤其是在处理大型xml文件时
你只需要增加你的内存大小,你就会没事的。运行Java时,为
-Xmx
设置一个合适的大小,默认的Java堆大小非常小,尤其是在处理大型xml文件时
你只需要增加你的内存大小,你就会没事的。运行Java时,为-Xmx
设置一个合适的大小
你能看懂整张纸吗?如果是,则显示当前代码。是的,我读取了整个工作表中的记录。当我尝试获取记录时,我的异常堆内存超出范围。您能读取整个工作表吗?如果是,则显示当前代码。是的,我读取了整张工作表中的记录。当我尝试获取记录时,我得到了一个异常堆内存超出范围。谢谢。我有一个服务,该服务应接收此类excel文件并将其分离,以寻找其他解决方案。我拆分一个文件,因为当我尝试读取最大数量的记录时,会将错误堆内存超出范围,当我分割文件时,每个文件的记录数较少,那么可能这个问题不会出现,我不确定我认为的是正确的,当没有文件来自服务时,我还有一个困惑,这个问题再次出现。谢谢。我有一个服务,应该接收这样的excel文件并将其分离,然后寻找其他解决方案。我拆分文件是因为当我尝试读取最大记录数时,它会将错误堆内存抛出范围之外,当我拆分文件时,每个文件都有较少的记录,那么可能这个问题不会出现,我不确定我认为什么是正确的,我还有一个困惑,当没有来自服务的文件时,这个问题再次出现。
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.apache.xmlbeans.impl.store.Locale$ScrubBuffer.<init>(Locale.java:1885)
at org.apache.xmlbeans.impl.store.Locale.getScrubBuffer(Locale.java:1904)
at org.apache.xmlbeans.impl.store.Xobj.getValueAsString(Xobj.java:1205)
at org.apache.xmlbeans.impl.store.Xobj.fetch_text(Xobj.java:1796)
at org.apache.xmlbeans.impl.values.XmlObjectBase.get_wscanon_text(XmlObjectBase.java:1332)
at org.apache.xmlbeans.impl.values.XmlObjectBase.check_dated(XmlObjectBase.java:1269)
at org.apache.xmlbeans.impl.values.JavaLongHolder.longValue(JavaLongHolder.java:53)
at org.apache.xmlbeans.impl.values.XmlObjectBase.getLongValue(XmlObjectBase.java:1502)
at org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTRowImpl.getR(Unknown Source)
at org.apache.poi.xssf.usermodel.XSSFRow.getRowNum(XSSFRow.java:321)
at org.apache.poi.xssf.usermodel.XSSFSheet.initRows(XSSFSheet.java:180)
at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:147)
at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:134)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:235)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:190)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:189)
at com.arosys.excelReading.ReadXLSX.loadFile(ReadXLSX.java:49)
at com.arosys.excelReading.ReadXLSX.getNumberOfSheet(ReadXLSX.java:121)
at com.arosys.excelReading.ReadXLSX.main(ReadXLSX.java:324)
Java Result: 1