目前,我正在尝试使用参考UpdatePageContent
提供的 OneNote API 中的函数将内容添加到 OneNote 2013 页面Microsoft.Office.Interop.OneNote
。但是,我总是得到错误代码0x80042001
,在文档中描述为XML 无效。但是,我无法理解以下简单代码中的 XML 无效的原因。
using System;
using OneNote = Microsoft.Office.Interop.OneNote;
namespace ConsoleApplicationOneNoteTest
{
class Program
{
static void Main(string[] args)
{
OneNote.Application onenoteApp = new OneNote.Application();
string pageChangesXml = "<?xml version=\"1.0\"?>" +
"<one:Page xmlns:one=\"http://schemas.microsoft.com/office/onenote/2013/onenote\" " +
"ID=\"{787BF30C-0B35-4D74-A13B-AD00D046F97D}{1}{E19479572117852244555720107518407865185197031}\">" +
"<one:Outline>" +
"<one:OEChildren>" +
"<one:OE>" +
"<one:T>" +
"<![CDATA[New Text]]>" +
"</one:T>" +
"</one:OE>" +
"</one:OEChildren>" +
"</one:Outline>" +
"</one:Page>";
onenoteApp.UpdatePageContent(pageChangesXml, DateTime.MinValue);
}
}
}
页面 ID 是从 OneNote Notebook 层次结构中获得的,我可以确认它是正确的,因为调用GetPageContent
使用相同的 ID 工作正常。所以在我看来,XML 实际上一定存在一些问题。我错过了什么?
编辑:根据 dbc 的评论,我更深入地研究了这个答案,它最初似乎来自这里,尽管它处理的是编辑 OneNote 页面中的现有条目而不是添加新内容,这是我想要做的。将建议的代码减少到必要的代码给我留下了以下内容:
using System;
using System.Linq;
using XML = System.Xml.Linq;
using OneNote = Microsoft.Office.Interop.OneNote;
class Program
{
static void Main(string[] args)
{
OneNote.Application onenoteApp = new OneNote.Application();
XML.XNamespace ns = GetNamespace(onenoteApp);
string PageId = "{787BF30C-0B35-4D74-A13B-AD00D046F97D}{1}{E19479572117852244555720107518407865185197031}";
string xml;
onenoteApp.GetPageContent(PageId, out xml, OneNote.PageInfo.piAll);
var doc = XML.XDocument.Parse(xml);
var outLine = doc.Descendants(ns + "Outline").First();
var content = outLine.Descendants(ns + "T").First();
string contentVal = content.Value;
content.Value = "modified";
onenoteApp.UpdatePageContent(doc.ToString(), DateTime.MinValue);
}
static XML.XNamespace GetNamespace(OneNote.Application app)
{
string xml;
app.GetHierarchy(null, OneNote.HierarchyScope.hsNotebooks, out xml);
var doc = XML.XDocument.Parse(xml);
return doc.Root.Name.Namespace;
}
}
但是,现在我收到错误0x8004200B
,这在文档中解释为该部分是只读的。当然,没有设置只读访问权限,手动编辑该页面我也没有问题。此外,谷歌对该错误并没有真正的帮助。
也许不同的错误代码意味着我的 XML 现在具有 OneNote 接受的格式(尽管我看不出与以前的方法有什么不同)。但是我仍然没有修改现有页面的运气。特别是,两个链接的线程表明上述代码应该开箱即用,因为它在两种情况下都是公认的答案。另一方面,在我的场景中,这根本不起作用。这里发生了什么?
编辑 2:我的第二个代码块在运行 Win 7 x64、OneNote 2013 和 Visual Studio 2015 的另一台机器上工作,到目前为止我使用的机器正在运行 Win 7 x86、OneNote 2013 和 Visual Studio 2010。所以也许 VS2010 库是只是到老才能正确与 OneNote 2013 交谈?我将尝试收集更多信息,看看我是否可以从中做出答案。