我试图找到是否可以通过Microsoft.Office.Interop.OneNote引用中的UpdatePageContent将内容添加到oneNote页面。
我想创建一个带有我用XML制作的默认模板的页面,但是msdn的文档告诉我这个函数只允许结构:
msdn doc:
您传递给UpdatePageContent方法的XML代码中必须包含的唯一对象是已更改的页级对象(如页面上的轮廓,图像或页面上的墨迹)。此方法不会修改或删除未在bstrPageChangesXmlIn参数中指定的页级对象。该方法完全替换页面级对象,例如轮廓,其ID与您传递的对象的ID相匹配。因此,您必须在代码中完全指定所有页面级对象,包括其现有内容以及您希望对其进行的更改。
我的问题是:我可以使用此库在页面中添加元素吗?如果是这样,怎么样?
感谢
答案 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的问题,请浏览以下链接。
答案 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%的工作原因,因为我自己完成了这项工作:)
希望这很有帮助。