2017-05-25 68 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上。該問題系統與其他系統的集成要好得多。 –

相關問題