更新 ppt 幻灯片 apache poi 中的嵌入工作表

问题描述 投票:0回答:1

我正在尝试更新 Powerpoint 幻灯片中嵌入的 Excel 文件,但我无法执行此操作。我想知道是否可以更新现有的 Excel 嵌入工作表,或者我必须根据新文件的输入流从头开始创建它,然后附加它?

这就是我所拥有的enter image description here.

独特的嵌入文件并尝试将其替换为另一个文件,这样做(使用 apache poi 5.2.4 ):

    PackagePart excelEmbedding = slideShow.getAllEmbeddedParts().get(0);
    InputStream is = excelEmbedding.getInputStream();
    XSSFWorkbook workbook = new XSSFWorkbook(is);
    FileOutputStream newTestFileOut = new FileOutputStream(newTestFilePath);
    workbook.write(newTestFileOut);
    workbook.close();

为了得到这个: enter image description here

谢谢您的回答。

apache-poi
1个回答
0
投票

您的代码从嵌入式

XSSFWorkbook
获取
PackagePart
并将其写入外部文件,但不作为嵌入式包部分。因此,此代码既不会更新嵌入的工作簿,也不会用另一个工作簿替换它。

PackagePart.getOutputStream 提供对

OutputStream
的访问
PackagePart

因此更新嵌入式工作簿就像这样:

使用

XSSFWorkbook
从嵌入的
PackagePart
中获取
XSSFWorkbook workbook = new XSSFWorkbook(packagePart.getInputStream());
。然后对
XSSFWorkbook
执行所需操作,然后将更改后的
XSSFWorkbook
写入通过
packagePart.getOutputStream()
获得的输出流。写入后,不要忘记关闭该输出流以及包部分 -> PackagePart.close

替换嵌入式工作簿就像这样:

获取嵌入的

PackagePart
并从其他地方获取
XSSFWorkbook
。然后将
XSSFWorkbook
写入通过
packagePart.getOutputStream()
获得的输出流。写入后不要忘记关闭该输出流以及包部分。

© www.soinside.com 2019 - 2024. All rights reserved.