如何在 C# 中删除 OneNote 页面?

How can I delete a OneNote page in C#?

我正在使用 C# 中的 OneNote 互操作来尝试使用以下代码块删除页面:

static string GetObjectId(string parentId, HierarchyScope scope, string objectName)
{
    string xml;
    onenote.GetHierarchy(parentId, scope, out xml);

    var doc = XDocument.Parse(xml);
    var nodeName = "";

    switch (scope)
    {
        case (HierarchyScope.hsNotebooks): nodeName = "Notebook"; break;
        case (HierarchyScope.hsPages): nodeName = "Page"; break;
        case (HierarchyScope.hsSections): nodeName = "Section"; break;
        default:
            return null;
    }

    var node = doc.Descendants(ns + nodeName)
        .Where(n => n.Attribute("name").Value == objectName)
        .FirstOrDefault();

    return node.Attribute("ID").Value;
}

static string DeletePage(string sectionId, string pageId, string pageName)
{
    var pageId = GetObjectId(sectionId, HierarchyScope.hsPages, pageName);
    onenote.DeleteHierarchy(pageId, DateTime.MinValue, true);
}

但每次我打开 OneNote 时,页面仍然存在。

我在下一页上看到这是我应该使用的方法,但我似乎运气不佳:https://msdn.microsoft.com/en-us/library/office/gg649853(v=office.14).aspx

有人可以为我指明正确的方向,了解如何使用 C# 中的 OneNote 互操作删除 OneNote 中的页面。

这是一个老问题,但由于没有答案...我发现只需按如下方式调用函数即可:

onenote.DeleteHierarchy(pageId)

有效并将导致文件被发送到回收站。如果要完全删除页面,请执行以下操作:

onenote.DeleteHierarchy(pageId, deletePermanently:true)

使用 dateExpectedLastModified 参数有点棘手。
根据 MSDN –(可选)您认为要删除的对象的最后修改日期和时间。如果您为此参数传递了一个 non-zero 值,OneNote 只有在您传递的值与上次修改对象的实际日期和时间相匹配时才会继续更新。传递此参数的值有助于防止意外覆盖自上次修改对象以来用户所做的编辑。