书签不一致

时间:2013-05-14 09:24:15

标签: c# ms-word bookmarks

我现在试图解决这个问题大约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()方法完全从Title数组中删除Bookmarks。我知道会发生这种情况,但我如何才能更换书签而不是完全删除它?当我查看我的文档时,我可以看到特定书签上的文本实际上发生了变化,但删除了书签,这是不希望的。 固定这个。添加到代码SNIPPET

所以我的问题是双重的:

  1. 在我操作集合之前,元素如何从Bookmarks集合中消失?
  2. 如何更换书签而不是完全删除书签? 固定这个。添加到代码SNIPPET
  3. 提前致谢!

0 个答案:

没有答案