0

UpdatePageContent現在、リファレンスで提供されている OneNote APIの関数を使用して、OneNote 2013 ページにコンテンツを追加しようとしていMicrosoft.Office.Interop.OneNoteます。ただし、ドキュメントでは XML が無効0x80042001であると説明されているエラー コードが常に表示されます。それでも、次の単純なコードの 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 のコメントに続いて、私はこの回答をさらに詳しく調べました。これはもともとhereから来ているように見えますが、新しいコンテンツを追加するのではなく、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;
    }
}

ただし、現在、エラーを受け取っています。これは、ドキュメントで The section is read-only0x8004200Bとして説明されています。もちろん、読み取り専用アクセスが設定されたことはなく、手動でページを編集するのに問題はありません。また、Google はそのエラーについてあまり役に立ちません。

異なるエラー コードは、XML が OneNote で受け入れられる形式になったことを意味している可能性があります (ただし、以前のアプローチとの違いはわかりません)。しかし、それでも既存のページを変更することはできません。特に、リンクされた 2 つのスレッドは、上記のコードがそのまま使用できることを示唆しています。一方、私のシナリオでは、これはまったく機能しません。ここで何が起こっているのですか?


編集 2: 私の 2 番目のコード ブロックは、Win 7 x64、OneNote 2013、および Visual Studio 2015 を実行している別のマシンで動作します。これまでに使用したマシンは、Win 7 x86、OneNote 2013、および Visual Studio 2010 を実行しています。 OneNote 2013 と適切に対話するには古すぎますか? もう少し情報を集めて、答えを出すことができるか試してみます。

4

1 に答える 1