如何使用 apache poi 检索 pptx 幻灯片名称
How to retrieve pptx slide name with apache poi
Powerpoint 幻灯片具有可通过 VBA 访问和修改的内部名称。
参见例如Powerpoint: Manually set Slide Name
我想通过 apache poi 访问名称。
我试过了:
public String getName() {
CTSlide ctSlide = slide.getXmlObject();
String name=ctSlide.getCSld().getName();
return name;
}
但如果幻灯片名称只有默认名称,则只能通过这种方式获取空字符串。
在 Apache POI 中获取(甚至设置)pptx 文件的幻灯片名称的正确方法是什么?
默认情况下幻灯片名称未定义,因此您收到一个空字符串。如果您使用链接的 VBA 示例,然后尝试上面的代码,您将获得幻灯片名称。
相应的 setter 也有效 ...
由于幻灯片名称只能在 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();
}
Powerpoint 幻灯片具有可通过 VBA 访问和修改的内部名称。 参见例如Powerpoint: Manually set Slide Name
我想通过 apache poi 访问名称。 我试过了:
public String getName() {
CTSlide ctSlide = slide.getXmlObject();
String name=ctSlide.getCSld().getName();
return name;
}
但如果幻灯片名称只有默认名称,则只能通过这种方式获取空字符串。
在 Apache POI 中获取(甚至设置)pptx 文件的幻灯片名称的正确方法是什么?
默认情况下幻灯片名称未定义,因此您收到一个空字符串。如果您使用链接的 VBA 示例,然后尝试上面的代码,您将获得幻灯片名称。 相应的 setter 也有效 ...
由于幻灯片名称只能在 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();
}