OneNote,使用UpdatePageContent插入元素

时间:2013-02-14 13:18:14

标签: c# xml visual-studio-2010 xsd onenote

我试图找到是否可以通过Microsoft.Office.Interop.OneNote引用中的UpdatePageContent将内容添加到oneNote页面。

我想创建一个带有我用XML制作的默认模板的页面,但是msdn的文档告诉我这个函数只允许结构:

msdn doc:

您传递给UpdatePageContent方法的XML代码中必须包含的唯一对象是已更改的页级对象(如页面上的轮廓,图像或页面上的墨迹)。此方法不会修改或删除未在bstrPageChangesXmlIn参数中指定的页级对象。该方法完全替换页面级对象,例如轮廓,其ID与您传递的对象的ID相匹配。因此,您必须在代码中完全指定所有页面级对象,包括其现有内容以及您希望对其进行的更改。

我的问题是:我可以使用此库在页面中添加元素吗?如果是这样,怎么样?

感谢

3 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:0)

当你提出要问的时候,对于下一个SOF会员,很容易让其他SOF会员正确理解这个问题。

有关语法并解决您使用Onepagenote的问题,请浏览以下链接。

http://msdn.microsoft.com/en-us/magazine/ff796230.aspx

http://social.msdn.microsoft.com/Forums/pl-PL/officegeneral/thread/4596510a-6509-4e3a-be08-c11131fa4663

答案 2 :(得分:0)

为什么要自己这么努力? 您只需在OneNote中创建模板,然后使用互操作来获取层次结构。因此,之后您可以使用一个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%的工作原因,因为我自己完成了这项工作:)

希望这很有帮助。