c# excel 插件,Range.Find 循环问题

c# excel addin, Range.Find loop issue

我正在制作一个 excel 加载项,其中一个部分是我正在构建自定义 class 范围列表,其中单元格中有特定值。所以基本上我想找到所有包含单词 "Action=>" 的单元格。无论如何,我使用与 MSDN 列表基本相同的代码来遍历 Range.find 但是,我遇到了一个奇怪的问题。

当我 运行 第一个 resultActionCurrentRange = colRange.Find(etc.) 它给我返回第一个实例,单元格 1,1。然后,当它进入 while 循环时,colRange.FindNext 执行我期望的操作并找到下一个实例,即单元格 1,18。但由于某种原因,它再次循环并返回并再次找到 1,1!所以我最终在列表中得到了 3 个范围,而不仅仅是我想要的 2 个。就像向前循环,然后向后循环。

关于我做错了什么有什么建议吗?谢谢,

Excel.Workbook activeWorkBook =Globals.ThisAddIn.Application.ActiveWorkbook;
Excel.Worksheet activeWorkSheet = activeWorkBook.ActiveSheet;
Excel.Range colRange = activeWorkSheet.Columns["A:A"];
Excel.Range resultActionFirstRange = null;
Excel.Range resultActionCurrentRange = null;
List<Excel.Range> ActionRangeList = new List<Excel.Range>();

string searchActionLabel = "Action=>";
string searchDBLabel = "DatabaseName=>";
string searchTblLabel = "TableName=>";

resultActionCurrentRange = colRange.Find(searchActionLabel, Type.Missing, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, Type.Missing, Type.Missing);


//get action
while (resultActionCurrentRange != null)
{
    if (resultActionFirstRange == null)
    {
        resultActionFirstRange = resultActionCurrentRange;
        ActionRangeList.Add(resultActionFirstRange);
    }

    else if (resultActionCurrentRange.get_Address(Excel.XlReferenceStyle.xlA1) == resultActionFirstRange.get_Address(Excel.XlReferenceStyle.xlA1))
    {
        break;
    }

    resultActionCurrentRange = colRange.FindNext(resultActionCurrentRange);
    ActionRangeList.Add(resultActionCurrentRange);
    MessageBox.Show("Range is:" + resultActionCurrentRange.Column.ToString() + resultActionCurrentRange.Row.ToString());
    MessageBox.Show("Range list count is: " + ActionRangeList.Count.ToString());
}

您没有做错任何事 - 这是记录在案的行为。请参阅此处的备注:https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.findnext.aspx

如文档中所述,FindNext 将在列末尾循环并从顶部开始搜索。您需要做的是保存第一个查找结果的范围,并将其与 FindNext 的后续结果进行比较 - 当您找到匹配项时,您会停止,因为您已经循环回到初始位置。