C# 从OneNote互操作访问分区文件中的页面

C# 从OneNote互操作访问分区文件中的页面,c#,C#,我有一些OneNote。一个文件。我想按程序提取它们的内容。我在尝试访问页面时被卡住了 我打电话: app.OpenHierarchy(@"C:\test\TestSection.one", System.String.Empty, out strXML, CreateFileType.cftNone); 在strXML中是一个ID 然后我叫: app.GetHierarchy(strXML, HierarchyScope.hsPages, strXML2); 这将返回一个只包含的XM

我有一些OneNote
。一个
文件。我想按程序提取它们的内容。我在尝试访问页面时被卡住了

我打电话:

app.OpenHierarchy(@"C:\test\TestSection.one", 
  System.String.Empty, out strXML, CreateFileType.cftNone);
在strXML中是一个ID

然后我叫:

app.GetHierarchy(strXML, HierarchyScope.hsPages, strXML2);
这将返回一个只包含
的XML块。它的属性与strXML中的ID和物理.one文件的路径相匹配

我已验证OneNote中打开的这些.one文件。我可以看到这个测试。一个有很多页面。我做错了什么或错过了什么


我使用的是Office 2013(第15版)和VS 2013(我必须在OneNote Interop第15版参考中将“嵌入InteropTypes”设置为False才能生成内容)

使用HiearchyScope.hspage调用app.GetHierarchy后,您现在将拥有存储在TestSection.one文件中的所有笔记本、分区和页面。如果您希望在调用GetHierarchy后遍历笔记本、分区和页面的层次结构,下面是一个示例

var notebookName = "My Notebook";
var sectionName = "My Meetings";
var xdoc = XDocument.Parse(strXML2);
var ns = xdoc.Root.Name.Namespace;
var myNotebook = xdoc.Root.Descendants(ns + "Notebook").SingleOrDefault(n => n.Attribute("name").Value == notebookName);
if (myNotebook != null)
{
    var mySection = myNotebook.Descendants(ns + "Section").SingleOrDefault(s => s.Attribute("name").Value == sectionName);
    if (mySection != null)
    {
        var pages = mySection.Descendants(ns + "Page");

        // Now do something here with the pages!
        // ...
    }
}