2013-02-14 125 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%,因为我自己做了:)

希望这是有帮助的。