解析excel文件并读取单元格
我有一个excel文件。 我上传了截图。 我需要编写一个.NET应用程序(控制台应用程序)来解析excel文件。 您可以看到标题为“function名称”的单元格。 我的.NET应用程序应该找到该特定单元格并读取该列中的内容,例如Template,InstanceFromTemplate,Task等。 如果它读取Task,它应该像Task()一样调用CreateTask函数; 如果它读取InstanceFromTemplate,它应该调用InstanceFromTemplate函数,如TaskInstanceFromTemplate();
我已经为这些函数编写了代码。 我只需要有关如何解析excel表的帮助,转到该特定列,读取包含该列下的函数名称的单元格并调用该适当的函数。 任何帮助,将不胜感激。
算法就像
- 打开excel文件
- 搜索标题为“函数名称”的标题单元格
- 读取标题单元格下的第一个单元格
- 如果第一个单元格读取,则调用函数(GetAllTemplate函数的代码已经存在)只需要在找到它之后调用它
- 如果是第二个单元格,则调用函数。
- 到达标题单元格function名称下的最后一个单元格。 所以,退出
基于你想要做什么的描述你应该真的使用LINQ to Ecxel插件我认为这是解决你的问题的简单方法
我强烈建议使用像Excel Data Reader这样的库,并使用托管代码中的数据。 CodePlex网站有一个很好的例子来满足您的需求。
使用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是混乱的。 你最好的选择是使用图书馆。