解析excel文件并读取单元格

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

我已经为这些函数编写了代码。 我只需要有关如何解析excel表的帮助,转到该特定列,读取包含该列下的函数名称的单元格并调用该适当的函数。 任何帮助,将不胜感激。

算法就像

  1. 打开excel文件
  2. 搜索标题为“函数名称”的标题单元格
  3. 读取标题单元格下的第一个单元格
  4. 如果第一个单元格读取,则调用函数(GetAllTemplate函数的代码已经存在)只需要在找到它之后调用它
  5. 如果是第二个单元格,则调用函数。
  6. 到达标题单元格function名称下的最后一个单元格。 所以,退出

基于你想要做什么的描述你应该真的使用LINQ to Ecxel插件我认为这是解决你的问题的简单方法

http://code.google.com/p/linqtoexcel/

我强烈建议使用像Excel Data Reader这样的库,并使用托管代码中的数据。 CodePlex网站有一个很好的例子来满足您的需求。

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

http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm

使用Excel互操作,您可以这样做。 我认为函数名称指向excel工作簿中定义的函数,否则你必须更改该部分以使用reflection(但在这种情况下,你需要一个接收器的方法,我没有看到一个在问题中)。

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++; } 

额外注释以供将来参考。 只是想指出,使用interops是混乱的。 你最好的选择是使用图书馆。