我现在尝试了大约 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
所以我的问题有两个:
Bookmarks
为什么在我操作集合之前元素就从集合中消失了?- 如何替换书签而不是完全删除它?解决了这个问题。添加到代码片段
提前致谢!