2

私はこれを約30分間理解しようとしましたが、役に立ちませんでした。

私はこのコードを得ました:

class BookMarkTest
{
    Application word;
    Document doc;

    public BookMarkTest()
    {
        word = new Application();
        doc = word.Documents.Open("C:\\Users\\Vipar\\Desktop\\TestSkabelon.docx");
        Console.WriteLine("BEFORE:\n");
        foreach (Bookmark b in doc.Bookmarks)
        {
            Console.WriteLine("Name: {0}\n", b.Name);
        }
        Console.WriteLine("Name: {0}, Text: {1}\n", doc.Bookmarks[2].Name, doc.Bookmarks[2].Range.Text);
        test(ref doc);
        Console.WriteLine("------------------\n");
        Console.WriteLine("AFTER:\n");
        foreach (Bookmark b in doc.Bookmarks)
        {
            Console.WriteLine("Name: {0}\n", b.Name);
        }
        Console.WriteLine("Name: {0}, Text: {1}\n", doc.Bookmarks[2].Name, doc.Bookmarks[2].Range.Text);
        doc = null;
        word = null;
    }

    // Fixed the code so it replaces bookmarks correctly rather than removing them.
    public void test(ref Document doc)
    {
        Dictionary<string, Bookmark> bookmarks = new Dictionary<string, Bookmark>();
        foreach(Bookmark b in doc.Bookmarks) {
            bookmarks.Add(b.Name, b);
        }
        BookMarkReplaceNative(bookmarks["Titel"], "Min nye titel");
    }

    internal void BookMarkReplaceNative(Bookmark bookmark, string newText)
    {
        object rng = bookmark.Range;
        string name = bookmark.Name;

        bookmark.Range.Text = newText;
        doc.Bookmarks.Add(name, rng);
    }
}

まず、すべてのブックマークがあるかどうかを確認します。3つあります(他のことをする前にこれを確認するためにそれらを印刷します)ので、配列は になるはずですが0 = KontraktStart, 1 = Signatur, 2 = Titel、呼び出すdoc.Bookmarks[2].Nameと.SignaturではなくTitel. その理由がわかりません。私はやろうとしましdoc.Bookmarks[3].Nameたが、それは要素が存在しないことを教えてくれます。なぜか名前を呼べないdoc.Bookmarks[0].Name。要素が消えて、何も置き換えられないようなものです。

また、私のメソッドは配列から完全にtest()削除します。そうなることはわかっていましたが、ブックマークを完全に削除するのではなく、ブックマークを置き換えるにはどうすればよいでしょうか? ドキュメントを見ると、特定のブックマークのテキストが実際に変更されていることがわかりますが、ブックマークは削除されていますが、これは望ましくありません。これを修正しました。コード スニペットに追加TitleBookmarks

だから私の質問は2つあります:

  1. Bookmarksコレクションを操作する前に、コレクションから要素が消えるのはなぜですか?
  2. ブックマークを完全に削除するのではなく、置き換えるにはどうすればよいですか? これを修正しました。コード スニペットに追加

前もって感謝します!

4

0 に答える 0