如何使用Apache POI刷新pptx中的嵌入内容?

时间:2016-01-26 10:55:02

标签: java apache-poi powerpoint xslf

亲爱的,

我正在使用Apache POI,并尝试使用Powerpoint报告自动执行某些任务。更准确地说,我想从代码更新.pptx演示文稿中的数据,包括嵌入式Excel电子表格(显示为表格)。

到目前为止,我已设法更新嵌入电子表格本身,但pptx演示文稿没有刷新":当我打开文件时,旧值可见,但新值双击网格时显示(进入"编辑"模式)。

根据Gagravarr对此帖Unable to see Apache POI updated data value in BarChart in pptx without editing的评论,预计会出现这种情况:基础文件确实已更新,但预渲染版本仍然存在。

因此,我想"刷新"预渲染版本:你知道如何使用Apache POI做到这一点吗? (或至少" zap"这个预渲染版本,希望Powerpoint在我打开幻灯片时重新渲染它)。

我不熟悉POI用户列表档案,所以如果答案在某处,我很抱歉。非常感谢,最诚挚的问候!

这是我目前的代码:

// Open SlideShow
FileInputStream fileInputStream = new FileInputStream(sourceFilePath);
XMLSlideShow slideShow = new XMLSlideShow(fileInputStream);
fileInputStream.close();


// Get PackagePart (shortened version)
PackagePart excelEmbedding = slideshow.getAllEmbedds().get(3);


// Update underlying spreadsheet (shortened version)
InputStream is = excelEmbedding.getInputStream();
XSSFWorkbook workbook = new XSSFWorkbook(is);    

XSSFRow row = sheet.getRow(1);
XSSFCell cell = row.getCell(3);
cell.setCellValue("TEST");

OutputStream os = excelEmbedding.getOutputStream();
workbook.write(os);
os.close();
workbook.close();


// Save changes
FileOutputStream fileOutputStream = new FileOutputStream(targetFilePath);
slideShow.write(fileOutputStream);
fileOutputStream.close();

0 个答案:

没有答案