Interop Excel .Find()整个匹配找不到值,部分匹配找到

问题描述 投票:0回答:1

因此,我有一个电子表格,我试图在其中查找某些列标题的索引。我发现的是XlLookAt.xlWhole找不到值。但是,如果我使用XlLookAt.xlPart,则可以。

我无法使用xlPart,因为在某些情况下找不到正确的匹配项。

我已经确认实际电子表格的单元格中只有AMT_ISSUED,并且两端都没有空格。

没有人知道为什么XlLookAt.xlWhole不起作用。这是我正在使用的代码

List<int> columnNumbers = new List<int>();
object misValue = System.Reflection.Missing.Value;
var columnIndex = range.EntireRow.Find("AMT_ISSUED",
                            misValue, XlFindLookIn.xlValues, XlLookAt.xlWhole,
                            XlSearchOrder.xlByColumns, XlSearchDirection.xlNext,
                            false);

var index = columnIndex?.Column ?? 0;
columnNumbers.Add(index);

更新:

我什至做到了:

 var value = ((Range)range.Cells[1, 4]).Value2.ToString();

 var columnIndex = range.EntireRow.Find(value,
                        misValue, XlFindLookIn.xlValues, XlLookAt.xlWhole,
                        XlSearchOrder.xlByColumns, XlSearchDirection.xlNext,
                        false);
 var index = columnIndex?.Column ?? 0;
 columnNumbers.Add(index);

value找到正确的文本,但列索引仍为null

[WORKAROUND(我不喜欢它,但是它将使我克服这个障碍)注意:标题可能在第1行或第2行中,如果在第2行中,则第一行中填充了第一个单元格

for (int i = 1; i < 3; i++)
            {
                for (var h = 1; h <= colCount; h++)
                {
                    object cellValue = ((Range)range.Cells[i, h]).Value2;
                    if ((h== 1 || h==2) && cellValue == null)
                    {
                        break;
                    }

                    if (columns.Contains(cellValue))
                    {
                        columnNumbers.Add(h);
                    }
                }
            }
c# excel office-interop excel-interop
1个回答
0
投票

Range.Find方法返回Range对象。因此,首先,您需要获取Range,然后,如果不是null,则获取列索引:

// Create Excel instance
Excel.Application excel = new Excel.Application { Visible = true };
Excel.Workbook book = excel.Workbooks.Open(@"PATH_TO_FILE");
Excel.Worksheet sheet = book.Sheets[1] as Excel.Worksheet;
// Search in the first row
Excel.Range header = sheet.Range["1:1"].Find("AMT_ISSUED", LookAt: Excel.XlLookAt.xlWhole);
if (header != null)
{
    // Header is found
    int index = header.Column;
}
else
{
    // Header is not found
}
© www.soinside.com 2019 - 2024. All rights reserved.