這是我第一次問一個問題在這裏所以這裏有雲:Word加載搜索永遠循環
我在尋找,有一個Word文檔中文字「標題1」或「標題2」風格的名字。一旦找到,我將爲該文本的開頭和文檔的結尾設置一個新的範圍,並調用一個方法來查找該範圍中的第一個表格,如果第二列中有文本,則在第一列中找到第一個表格。現在我的問題發生在我的代碼找到完全匹配的第一條記錄時。一切正常,但Find.Execute進入永久循環,並不斷找到相同的文本。我希望它繼續搜索,直到文檔結束。這裏是我的代碼,並在此先感謝:
public void TextFind(object findText, string reqCode)
{
Document doc = Application.ActiveDocument;
Range docRange = doc.Sections[1].Range;
var intCount = 0;
docRange.SetRange(0, docRange.Characters.Count);
if (findText == null) throw new ArgumentNullException("findText");
docRange.Find.Execute(findText, Forward: true, Wrap: WdFindWrap.wdFindStop);
while (docRange.Find.Found)
{
intCount++;
Style style = docRange.get_Style();
var styleName = style.NameLocal;
if (styleName == "Heading 1" || styleName == "Heading 2")
{
var endRange = doc.Sections[1].Range;
var docRange2 = docRange;
docRange2.SetRange(docRange.Start, endRange.End);
ApplyNumberingToTable(docRange2, reqCode);
}
docRange.Find.Execute(findText, Forward: true, Wrap: WdFindWrap.wdFindStop);
}
MessageBox.Show(intCount.ToString());
}
的intCount
和MessageBox
是由我來診斷問題的一種嘗試。
嘗試二號包括了:
所以我仍然被卡住,我試圖將搜索範圍添加到列表中,並運行在列表中的foreach,但每次的範圍內改變參考該範圍在列表中也會更改。我不能爲我的生活弄清楚t5o如何在我的while循環中實例化Range。以下是我的代碼:
public void TextFind(object findText, string reqCode)
{
Document doc = Application.ActiveDocument;
Range docRange = doc.Sections[1].Range;
var intCount = 0;
if (findText == null) throw new ArgumentNullException("findText");
var rangelist = new List<Range>();
var i = 0;
while (docRange.Find.Execute(findText, Forward: true, Wrap: WdFindWrap.wdFindStop))
{
rangelist = new List<Range> {docRange};
intCount++;
}
foreach (var range in rangelist)
{
Style style = range.get_Style();
var styleName = style.NameLocal;
if (styleName != "Heading 1" && styleName != "Heading 2") continue;
var endRange = doc.Sections[1].Range;
range.SetRange(range.Start, endRange.End);
ApplyNumberingToTable(range, reqCode);
}
if (intCount == 0) return;
MessageBox.Show(rangelist.ToString());
}
仍在尋找解決方法。 謝謝,
我試過,但無濟於事。循環中的find.execute會跳過第二個結果,在我的測試中,它使用標題1樣式的字符串。如果我刪除了find.execute,循環仍會掛起滿足if語句的第一個結果。將存儲在數組中工作的所有範圍,然後調用數組中每個範圍的ApplyNumberingToTable可能工作? – NutsPanther