C# 解析excel文件并读取单元格

C# 解析excel文件并读取单元格,c#,.net,console,console-application,C#,.net,Console,Console Application,我有一个excel文件。我已经上传了截图。我需要编写一个.NET应用程序(控制台应用程序)来解析excel文件。您可以看到一个标题为“函数名”的单元格。我的.NET应用程序应该找到特定的单元格,并读取该列中的内容,如模板、InstanceFromTemplate、任务等。如果它读取Task,则应该像Task()一样调用CreateTask函数;如果读取InstanceFromTemplate,则应调用InstanceFromTemplate函数,如TaskInstanceFromTemplate

我有一个excel文件。我已经上传了截图。我需要编写一个.NET应用程序(控制台应用程序)来解析excel文件。您可以看到一个标题为“函数名”的单元格。我的.NET应用程序应该找到特定的单元格,并读取该列中的内容,如模板、InstanceFromTemplate、任务等。如果它读取Task,则应该像Task()一样调用CreateTask函数;如果读取InstanceFromTemplate,则应调用InstanceFromTemplate函数,如TaskInstanceFromTemplate()

我已经为这些函数编写了代码。我只需要有关如何解析excel工作表、转到特定列、读取该列下包含函数名的单元格以及调用相应函数的帮助。任何帮助都将不胜感激

算法就像

  • 打开excel文件
  • 搜索标题为Function Name的标题单元格
  • 读取标题单元格下的第一个单元格
  • 如果第一个单元格读取,则调用函数(GetAllTemplate函数的代码已经存在)只需在找到它之后调用它
  • 如果是第二个单元格,则调用函数
  • 到达标题单元格函数名称下的最后一个单元格。那么,退出

  • 基于对您正在尝试做的事情的描述,您应该真正使用LINQ到Ecxel插件,我认为这是解决您的问题的简单方法


    基于对您正在尝试做的事情的描述,您应该真正使用LINQ到Ecxel插件,我认为这是解决您的问题的简单方法


    这里有一些教程可以帮助您入门:


    这里有一些教程可以帮助您入门:


    我强烈建议使用类库,并在托管代码中处理数据。CodePlex站点提供了一个很好的示例,可以满足您的需要。

    我强烈建议使用类似的库,并在托管代码中处理数据。CodePlex站点提供了一个很好的例子,可以满足您的需要。

    使用Excel interop,您可以这样做。我假设函数名指向excel工作簿中定义的函数,否则您必须更改该部分以使用反射(但在这种情况下,您需要方法的接收器,我在问题中没有看到)


    使用Excel interop,您可以这样做。我假设函数名指向excel工作簿中定义的函数,否则您必须更改该部分以使用反射(但在这种情况下,您需要方法的接收器,我在问题中没有看到)


    额外注释供将来参考。
    我只是想指出,使用互操作系统很麻烦。您最好使用库。

    额外注释以供将来参考。
    我只是想指出,使用互操作系统很麻烦。您最好的选择是使用库。

    很好,我不知道这个库-肯定会在未来的项目中使用它。ThanksI也只是在本周才找到这个库:)很好,我不知道这个库-肯定会在未来的项目中使用它。ThanksI仅在本周内找到此库:)这应该是一条评论。这应该是一条评论。
            object hmissing = System.Reflection.Missing.Value; 
    
            Xls.Application App = new Xls.ApplicationClass();
            App.Visible = true;
            Xls.Workbook wb = App.Workbooks.Open(@"c:\tmp\cartel1.xls", hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
                hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing);
            Xls.Worksheet ws = (Xls.Worksheet)wb.ActiveSheet;
            Xls.Range rng = ws.UsedRange;
            Xls.Range hdr = rng.Find("Function Name", hmissing, hmissing, hmissing, hmissing, Microsoft.Office.Interop.Excel.XlSearchDirection.xlNext, hmissing, hmissing, hmissing);
            string hdrAdd = hdr.get_Address(hmissing, hmissing, Microsoft.Office.Interop.Excel.XlReferenceStyle.xlA1, hmissing, hmissing);
            string[] pcs = hdrAdd.Split('$');
            string col = pcs[1];
            int row;
            int.TryParse(pcs[2], out row);
            string methName;
            row++;
            while ((methName = App.get_Range(col + row.ToString(), hmissing).get_Value(hmissing) as String) != null)
            {
                App.Run(methName.Split('.')[1], hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
                    hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
                    hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
                    hmissing, hmissing, hmissing);
                row++;
            }