Вот пример;предполагается, что у вас есть пункт использования ..
using Excel = Microsoft.Office.Interop.Excel;
.. и подготовленный доступ к рабочему листу:
Excel.Application xl = new Excel.Application();
xl.Workbooks.Open(filename);
Excel.Worksheet ws = xl.Workbooks[1].Worksheets[1]; // pick your sheet!
int keyColum = 3;
Теперь вы можете получить Range
из Cells
:
Excel.Range keyRange= ws.Range["C3:C53"];
.. или весь столбец:
Excel.Range keyRange= ws.Range["C:C"];
И поиск по всем вхождениям строки поиска:
Excel.Range keysFound = keyRange.Find(textBox1.Text);
Затем вы можете получить доступ к диапазону найденныхтакие ячейки:
string msg1 = keysFound.Count + " records found.";
string msg2 = "1st in row " + keysFound.Row;
string msg3 = "value from next column is "
+ ws.Cells[keysFound.Row + 1, keyColum + 1].value;
примечания:
- индексирование начинается с 0 в c #, но не в Excel (следовательно,
[keysFound.Row + 1,
) - мой столбец значенийодин столбец справа от ключей.Лучше всего использовать именованные индексы!
- , если ничего не найдено
keysFound
будет null
!(добавьте чек!) , так как вы хотите сопоставить весь ключ, вам нужно будет выполнить точный поиск:
Excel.Range keysFound = keyRange.Find(textBox1.Text, LookAt: Excel.XlLookAt.xlWhole);
Я все еще думаю, что захват всех данных и их вставка в Dictionary
будет самым чистым и быстрым решением, если только вам не нужно выполнить только один поиск ..