Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用c从excel工作表中读取键值对?_C#_Excel - Fatal编程技术网

C# 如何使用c从excel工作表中读取键值对?

C# 如何使用c从excel工作表中读取键值对?,c#,excel,C#,Excel,我是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.S

我是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;
}

这是一个例子;它假定您有一个using子句

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;
现在,您可以获取一系列单元格:

..或整个栏目:

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;
注:

索引在c中以0开始,但在excel中不以0开始,因此[keysFound.Row+1, “我的值”列是键右侧的一列。最好使用命名索引! 如果未找到任何内容,keysFound将为null!请添加检查! 由于要匹配整个密钥,因此需要进行精确搜索:

Excel.Range keysFound=keyRange.FindtextBox1.Text,LookAt:Excel.XlLookAt.xlother


我仍然认为,获取所有数据并将其填入字典将是最干净、最快的解决方案,除非你只需要进行一次查找。

它们在excel工作表中的外观如何?第一列包含所有键,第二列包含相关值。那么,问题是什么:读取一个单元格、读取两个单元格或读取一系列pai单元格的rs?它真的应该和读取任何其他数据没有什么区别,就像在很多例子中一样。我不想传递行和列,而是想在键作为参数传递时读取值,好的。我不会在excel中进行查找,而是将所有数据都放在一个字典中,但这实际上取决于有多少数据以及需要多长时间进行查询访问它们。用于直接访问或可能有帮助。。
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;