如何使用Java更新Excel元数据

时间:2018-11-12 07:50:54

标签: excel apache-poi

我正在尝试使用apache POI更新Java中的excel元数据。输入文件很大,包含8K列和600行。我正在使用以下代码

    OPCPackage pkg = OPCPackage.open(new File("path for input"));
    POIXMLProperties props = new POIXMLProperties(pkg);
    props.getCoreProperties().setTitle("Test Title");

    XSSFWorkbook wb = new XSSFWorkbook(pkg);
    FileOutputStream fos = new FileOutputStream("path for output");
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    wb.write(bos);
    fos.close();

上面的代码使我的内存不足异常如下所示。

java.lang.OutOfMemoryError: Java heap space
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
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:227)
at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:219)
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)

能否请您解决更新Excel属性的问题?

1 个答案:

答案 0 :(得分:0)

在评论中添加评论。...

如果您只是更改OPC级别的元数据,则无需随时在XSSF层中加载文件。仅当您还想更改电子表格内容(例如单元格)时,才需要这样做

您的代码可以很简单

OPCPackage pkg = OPCPackage.open(new File("path for input"));
POIXMLProperties props = new POIXMLProperties(pkg);
props.getCoreProperties().setTitle("Test Title");
props.commit();
pkg.close();