我正在尝试更新 Powerpoint 幻灯片中嵌入的 Excel 文件,但我无法执行此操作。我想知道是否可以更新现有的 Excel 嵌入工作表,或者我必须根据新文件的输入流从头开始创建它,然后附加它?
独特的嵌入文件并尝试将其替换为另一个文件,这样做(使用 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();
谢谢您的回答。
您的代码从嵌入式
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()
获得的输出流。写入后不要忘记关闭该输出流以及包部分。