C# 解析excel文件并读取单元格
我有一个excel文件。我已经上传了截图。我需要编写一个.NET应用程序(控制台应用程序)来解析excel文件。您可以看到一个标题为“函数名”的单元格。我的.NET应用程序应该找到特定的单元格,并读取该列中的内容,如模板、InstanceFromTemplate、任务等。如果它读取Task,则应该像Task()一样调用CreateTask函数;如果读取InstanceFromTemplate,则应调用InstanceFromTemplate函数,如TaskInstanceFromTemplate() 我已经为这些函数编写了代码。我只需要有关如何解析excel工作表、转到特定列、读取该列下包含函数名的单元格以及调用相应函数的帮助。任何帮助都将不胜感激 算法就像C# 解析excel文件并读取单元格,c#,.net,console,console-application,C#,.net,Console,Console Application,我有一个excel文件。我已经上传了截图。我需要编写一个.NET应用程序(控制台应用程序)来解析excel文件。您可以看到一个标题为“函数名”的单元格。我的.NET应用程序应该找到特定的单元格,并读取该列中的内容,如模板、InstanceFromTemplate、任务等。如果它读取Task,则应该像Task()一样调用CreateTask函数;如果读取InstanceFromTemplate,则应调用InstanceFromTemplate函数,如TaskInstanceFromTemplate
基于对您正在尝试做的事情的描述,您应该真正使用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++;
}