2017-05-25 70 views
0

Powerpoint幻灯片具有可通过VBA访问和修改的内部名称。 参见例如Powerpoint: Manually set Slide Name如何使用apache poi检索pptx幻灯片名称

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

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

,但只得到空字符串这样,如果幻灯片名称只有默认名称。

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

回答

3

幻灯片名称默认为undefined,因此您会收到一个空字符串。如果您使用链接的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(); 
} 
+0

我认为这是一个错误,默认名称不返回,因为它会在VBA中。默认名称似乎是“Sld”+幻灯片的ID –

+0

此功能可能适用于潜在的usermodel方法,但不适用于基础xmlbeans。我可以将其添加到API中,但我还不确定这种方法是否合理。如果你打开一个bugzilla入口,请也描述你的用例(简要地)。 – kiwiwings

+0

我有一个JSF Jira帐户,但Nob bugzilla帐户 - 是否有某种单点登录选项?最好的选择是如果你将所有东西都移植到github上。该问题系统与其他系统的集成要好得多。 –

相关问题