1

亲爱的大家,

我正在使用 Apache POI,我想复制一张幻灯片,其中包含来自代码的多个图表。

当幻灯片上没有图表时,下面的代码(受https://poi.apache.org/slideshow/xslf-cookbook.html#Merge启发)可以正常工作。

不幸的是,使用这种方法似乎无法复制图表:当我尝试打开生成的文件时,Powerpoint 检测到问题,尝试修复它,但失败了,我得到了空白幻灯片。

我检查了底层 XML 文件(使用 Open XML SDK),似乎图表本身(在文件夹/ppt/charts中)没有重复,并且关系文件(在文件夹/ppt/slides/_rels中)没有完全更新。

这是我当前的代码:

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

// Duplicate slide
XSLFSlideLayout layout = slide.getSlideLayout();
XSLFSlide newSlide = slideshow.createSlide(layout);
newSlide.importContent(slide);

// Save updated slideshow
FileOutputStream fileOutputStream = new FileOutputStream(outputFilePath);
slideShow.write(fileOutputStream);
fileOutputStream.close();

你知道我如何克隆一张幻灯片和它的图表吗?

非常感谢,最好的问候!

4

2 回答 2

2

你不能。我试了又试,问题是复制不处理图像或图表。

我不得不通过脚本手动复制文件。以下是步骤:

  • 找到幻灯片文件
  • 复制它
  • 在 XML 文件中找到图表对象,并记下关系 Id
  • 在关系文件中,检查由关系 ID指定的文件
  • 复制这个文件
  • 您还必须复制新幻灯片的关系文件,并更新名称
  • 新幻灯片不可见,您必须更新presentaion.xml
  • 请注意:如果您希望您的 PPTX 与 Microsoft Powerpoint 一起使用,您还必须复制相关的 Excel 工作簿(参见图表的关系文件)
于 2016-12-02T16:31:35.543 回答
0

自 Apache POI 4.0.0 以来,问题中的原始代码将用于复制幻灯片。

于 2020-05-17T23:15:46.227 回答