Apache poi XSSFSheet.write() 未完成

我正在使用 Java 8 运行 apache poi 4.0.0 并尝试用数据填充模板并将其保存到输出流。这会在将工作簿写入目标路径时导致问题,但仅在以调试模式/在其他计算机上运行时才会出现。模板文件在填充数据之前的大小为 7.5 MB


我对其进行了调试,发现方法调用worksheet.save(out, xmlOptions);在XSSFSheet某个时候停止了。


调试值out:


class:              org.apache.poi.openxml4j.opc.internal.MemoryPackagePartOutputStream

part:               Name: /xl/worksheets/sheet10.xml - Content Type: application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml

part-relationships: 3 relationship(s) = [/xl/worksheets/_rels/sheet10.xml.rels,/xl/worksheets/sheet10.xml,/xl/worksheets/_rels/sheet10.xml.rels]

调试值xmlOptions:


SAVE_USE_DEFAULT_NAMESPACE=null

CHARACTER_ENCODING=UTF-8

SAVE_OUTER=null

SAVE_SUGGESTED_PREFIXES={http://schemas.openxmlformats.org/drawingml/2006/chart=c, http://schemas.openxmlformats.org/wordprocessingml/2006/main=w, http://schemas.microsoft.com/office/word/2006/wordml=wne, http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes=vt, http://schemas.openxmlformats.org/presentationml/2006/main=p, urn:schemas-microsoft-com:office:word=w10, urn:schemas-microsoft-com:vml=v, http://schemas.openxmlformats.org/drawingml/2006/main=a, http://schemas.openxmlformats.org/officeDocument/2006/math=m, http://schemas.openxmlformats.org/officeDocument/2006/relationships=r, urn:schemas-microsoft-com:office:excel=x, urn:schemas-microsoft-com:office:office=o, http://schemas.openxmlformats.org/markup-compatibility/2006=ve, http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing=wp}

ENTITY_EXPANSION_LIMIT=1

SAVE_AGGRESSIVE_NAMESPACES=null

SAVE_SYNTHETIC_DOCUMENT_ELEMENT={http://schemas.openxmlformats.org/spreadsheetml/2006/main}worksheet

再深入一点,很明显它在这种方法上失败了:


public void save(OutputStream os, XmlOptions options) throws IOException

    { XmlCursor cur = newCursorForce(); try { cur.save(os, makeInnerOptions(options)); } finally { cur.dispose(); } }

在XmlObjectBase,特别是在newCursorForce()。


这种方法在所有其他机器上以及在调试模式下的机器上失败的原因是什么?如果正常执行,整个应用程序运行流畅。




一只斗牛犬
浏览 175回答 1
1回答

侃侃无极

正如我在第二次编辑中已经得出的结论,这确实是一个内存问题。使用作为 VM 参数执行应用程序-Xms1G -Xmx4G,应用程序没有引起任何问题,并且运行时非常接近我在测试时得到的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java