Как обновить метаданные Excel, используя Java - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь обновить метаданные Excel в Java, используя apache POI. Входной файл большой, содержит 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 голосов
/ 13 ноября 2018

Продвижение комментария к ответу ....

Если вы просто меняете метаданные уровня 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();
...