Как прочитать пары ключ-значение из таблицы Excel с помощью C #? - PullRequest
1 голос
/ 27 апреля 2019

Я новичок в C #. Я использовал приведенный ниже код для чтения данных из Excel, но мне нужна помощь, чтобы изменить его для чтения пар ключ-значение.

public String getData(int row, int col, String var)
{
    Excel.Application excelApp = new Excel.Application();
    if (excelApp != null)
    {
        List<string> prop = new List<string>(var.Split(new string[] {"."}, StringSplitOptions.None));

        Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(@"D:\\test.xlsx", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

        Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelWorkbook.Sheets[prop[0]];
        excelWorksheet.Select(Type.Missing);

        Excel.Range range = (excelWorksheet.Cells[row, col] as Excel.Range);
        string cellValue = range.Value.ToString();

        excelWorkbook.Close();
        excelApp.Quit();
        return cellValue;
    }
    return null;
}

1 Ответ

1 голос
/ 27 апреля 2019

Вот пример;предполагается, что у вас есть пункт использования ..

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 будет самым чистым и быстрым решением, если только вам не нужно выполнить только один поиск ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...