Итак, у меня есть электронная таблица, в которой я пытаюсь найти индекс определенных заголовков столбцов. Я обнаружил, что XlLookAt.xlWhole
не находит значения. Однако, если я использую XlLookAt.xlPart
, это так.
Я не могу использовать xlPart
, так как в некоторых случаях он не находит правильного совпадения.
Я подтвердил, что в ячейке в реальной таблице есть только AMT_ISSUED
и нет ' t любые пробелы на обоих концах.
Кто-нибудь знает, почему 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
.
ВОЗМОЖНОЕ РЕШЕНИЕ (мне это не нравится, но я преодолею это препятствие) Примечание: заголовки могут быть в строке 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);
}
}
}