我现在试图解决这个问题大约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
所以我的问题是双重的:
Bookmarks
集合中消失?提前致谢!