1

Powerpoint 幻灯片具有可通过 VBA 访问和修改的内部名称。参见例如Powerpoint:手动设置幻灯片名称

我想通过 apache poi 访问该名称。我试过了:

 public String getName() {
    CTSlide ctSlide = slide.getXmlObject();
    String name=ctSlide.getCSld().getName();
    return name;
  }

但如果幻灯片名称只有默认名称,则只能以这种方式获取空字符串。

在 Apache POI 中获取(甚至设置)pptx 文件的幻灯片名称的正确方法是什么?

4

1 回答 1

4

默认情况下,幻灯片名称未定义,因此您会收到一个空字符串。如果您使用链接的 VBA 示例,然后尝试上面的代码,您将获得幻灯片名称。相应的二传手也可以工作......

由于只能通过 VBA 修改幻灯片名称 - 我会改用幻灯片标题,但当然取决于您的用例。

public static void main(String[] args) throws Exception {
    // slide name has been set via VBA ...
    FileInputStream fis = new FileInputStream("slidename.pptx");
    XMLSlideShow ppt = new XMLSlideShow(fis);
    fis.close();
    XSLFSlide sl = ppt.getSlides().get(0);
    System.out.println(sl.getXmlObject().getCSld().getName());
    // set slide name via POI and validate it
    sl.getXmlObject().getCSld().setName("new name");
    FileOutputStream fos = new FileOutputStream("slidename2.pptx");
    ppt.write(fos);
    fos.close();
    ppt.close();
    fis = new FileInputStream("slidename2.pptx");
    ppt = new XMLSlideShow(fis);
    fis.close();
    System.out.println(sl.getXmlObject().getCSld().getName());
    ppt.close();
}
于 2017-05-25T20:22:25.707 回答