2013-02-14 122 views
0

我試圖找到是否可以通過Microsoft.Office.Interop.OneNote引用中的UpdatePageContent將內容添加到oneNote頁面。OneNote,用UpdatePageContent插入元素

我想創建一個與我在XML做了一個默認模板的頁面,但MSDN的documation說我該功能只允許結構:

MSDN文檔:

的唯一對象您必須在傳遞給UpdatePageContent方法的XML代碼中包含已更改的頁面級對象(如輪廓,頁面上的圖像或頁面上的墨水)。此方法不會修改或刪除您在bstrPageChangesXmlIn參數中未指定的頁面級對象。該方法完全替代了頁面級別的對象,例如輪廓,其ID與您傳遞的對象的ID匹配。因此,您必須在您的代碼中完整指定所有頁面級別的對象,包括其現有內容以及您想要對其進行的更改。

我的問題是:我可以用這個庫在頁面中添加元素嗎?如果是這樣,怎麼樣?

感謝

回答

1

您可以使用OMSpy工具來調查頁面內容結構。以下是一些樣本,以幫助您開始:

設置頁面標題,當你有PAGEID

 private static void SePageTitle(string pageId, string pageTitle) 
    { 
     Microsoft.Office.Interop.OneNote.Application m_app = new Microsoft.Office.Interop.OneNote.Application(); 
     string strPagTitle = "<one:Page xmlns:one=\"http://schemas.microsoft.com/office/onenote/2010/onenote\" ID=\"{0}\" >" + 
       "<one:Title selected=\"partial\" lang=\"en-US\">" + 
       "<one:OE style=\"font-family:Calibri;font-size:17.0pt\">" + 
        "<one:T><![CDATA[{1}]]></one:T> " + 
       "</one:OE>" + 
       "</one:Title>" + 
      "</one:Page>"; 
     strPagTitle = string.Format(strPagTitle, pageId, pageTitle); 
     m_app.UpdatePageContent(strPagTitle); 
    } 

添加元素,頁面,當你有PAGEID:

 private static void SetElementInPage(string pageId) 
    { 
     Microsoft.Office.Interop.OneNote.Application m_app = new Microsoft.Office.Interop.OneNote.Application(); 
     string strPageContent = "<one:Page xmlns:one=\"http://schemas.microsoft.com/office/onenote/2010/onenote\" ID=\"{0}\" >" + 
      "<one:Outline>" + 
       "<one:Position x=\"36.0\" y=\"86.4000015258789\" z=\"0\" />" + 
       "<one:Size width=\"117.001953125\" height=\"40.28314971923828\" />" + 
       "<one:OEChildren>" + 
        "<one:OE>" + 
         "<one:T><![CDATA[This is a sample data added to test out OneNote API functionality. Following is a list item.]]></one:T>" + 
        "</one:OE>" + 
       "</one:OEChildren>" + 
       "<one:OEChildren indent=\"2\">" + 
        "<one:OE alignment=\"left\">" + 
         "<one:List>" + 
          "<one:Bullet bullet=\"2\" fontSize=\"11.0\" />" + 
         "</one:List>" + 
         "<one:T><![CDATA[A for Apple]]></one:T>" + 
        "</one:OE>" + 
        "<one:OE alignment=\"left\">" + 
         "<one:List>" + 
          "<one:Bullet bullet=\"2\" fontSize=\"11.0\" />" + 
         "</one:List>" + 
         "<one:T><![CDATA[B for Ball]]></one:T>" + 
        "</one:OE>" + 
        "<one:OE alignment=\"left\">" + 
         "<one:List>" + 
          "<one:Bullet bullet=\"2\" fontSize=\"11.0\" />" + 
         "</one:List>" + 
         "<one:T><![CDATA[C for Cat]]></one:T>" + 
        "</one:OE>" + 
       "</one:OEChildren>" + 
      "</one:Outline>" + 
      "</one:Page>"; 
     strPageContent = string.Format(strPageContent, pageId); 
     m_app.UpdatePageContent(strPageContent); 
    } 
0

爲什麼不自己做起來很很難嗎? 您可以簡單地在OneNote中創建模板,並使用interop來獲取層次結構。所以之後你可以使用一個sectiongroup(這將是你的模板),這樣你就可以在一個sectiongroup的每個部分獲得頁面的內容。

我努力將元素從一個筆記本複製到另一個筆記本,但每個元素都有一個ObjectID。這表明該元素被該特定頁面所知。除去此屬性(因此不僅僅是屬性的值),OneNote會將該元素視爲新元素,並將該元素分配給ObjectID。

一個代碼示例我如何刪除ID和的objectID的從頁面:

string xml; 
        OneApplication.GetPageContent(page.Attributes["ID"].Value, out xml, PageInfo.piAll); 
        var doc = XDocument.Parse(xml); 
        var nodes = doc.Descendants(); 

        foreach (var node in nodes) 
        { 
         if (node.Attribute("objectID") != null) 
         { 
          node.Attributes("objectID").Remove(); 
         } else if (node.Attribute("ID") != null) 
         { 
          node.Attribute("ID").Value = ""; 
         } 
        } 

當你比所有元素添加到另一個頁面。你會看到他們。這工作100%,因爲我自己做了:)

希望這是有幫助的。