2011-03-30 98 views
6

我在OpenXML API或Word/VSTO API中找不到任何運氣,找到了創建或修改書籤的可見性的方法。即使在Word中手動添加書籤,也無法檢查書籤以隱藏書籤。雖然「書籤」對話框中的一個複選框,可讓您顯示隱藏書籤。那麼如何在XML中表示隱藏的書籤,並且可以使用Open XML SDK創建它們?或者他們是MS不再希望我們創造的遺產?Word/OpenXML - 如何創建隱藏書籤?

+3

你的名字(「System.Cats.Lol」)是我在SO上的最愛。 – 2012-12-25 07:37:12

回答

12

好吧,這比我想象的要容易......你只要在書籤名稱前加上下劃線即可。請注意,這隻能以編程方式完成,而不能在Word中手動添加書籤。

Iiiiiiiiinteresting ....

更新:另一件事,我發現 - 之前,你可以遍歷或在Bookmarks對象訪問隱藏的書籤,您必須將其ShowHidden屬性設置爲true。

PS - SO,如果您對拼寫字典有任何控制權,您可以添加「編程」。除非我拼錯了。 :)

+0

+1。很好的發現和感謝分享解決方案! – 2011-03-30 17:21:52

+0

NP,查看更新以及另一個有趣的怪癖...... – 2011-03-30 17:40:28

+0

確實很有趣。你可以繼續,並用它旁邊的空白複選標記來接受你的答案。 – 2011-04-03 17:41:32

0

我在word文件中創建了普通書籤,並且實用地將它們轉換爲隱藏書籤。如上所述,隱藏書籤只能以實用的方式創建,並且其名稱前面加「_」。在迭代書籤列表時,確保Bookmarks.ShowHidden設置爲true,否則隱藏的書籤不會顯示在列表中。以下是我用來隱藏所有可見書籤的代碼。最後,我還清除撤消記錄,以確保用戶無法撤消我所做的更改。如果您願意,您可以創建自定義撤消記錄刪除最後一個操作。

public static void hideAllBookmark(Document doc) 
{ 
    String newName = null; 
    Range newRange = null; 
    bool backup = doc.Bookmarks.ShowHidden; 
    doc.Bookmarks.ShowHidden = false; 

    for (int i = doc.Bookmarks.Count; i > 0; i--) 
    { 
     if (!doc.Bookmarks[i].Name.Substring(0, 1).Equals("_", StringComparison.OrdinalIgnoreCase)) 
     { 
      newName= "_" + doc.Bookmarks[i].Name; 
      newRange = doc.Bookmarks[i].Range; 
      doc.Bookmarks[i].Delete(); 
      doc.Bookmarks.Add(newName, newRange); 
     } 
    } 
    doc.Bookmarks.ShowHidden = backup; 
    doc.UndoClear(); 
}