我有一个excel文件。 我已经上传截图。 我需要写一个.NET应用程序(控制台应用程序)来解析excel文件。 你可以看到标题为“功能名”的小区。 我的.NET应用程序应该找到特定的细胞和读取该列中的内容,如模板,InstanceFromTemplate,任务等。 如果它读取任务,它应该调用像任务的CreateTask功能(); 如果它读取InstanceFromTemplate,它应该调用像TaskInstanceFromTemplate InstanceFromTemplate功能();
我写的代码为这些功能。 我只需要帮助就如何解析excel表,去那个特定的列,读包含列下函数名的细胞,并调用适当的功能。 任何帮助,将不胜感激。
算法是像
- 打开Excel文件
- 搜索标题单元格题为功能名称
- 读头单元格下的第一小区
- 如果第一个单元格中读取,调用函数(代码GetAllTemplate功能已经有了)只需要调用它AFTE找到它
- 如果第二电池,通话功能。
- 到达头细胞功能的名称下最后一个单元格。 因此,退出
基于什么你正在尝试做的,你真的应该使用LINQ Ecxel插件的描述,我认为它简单的方法来解决你的问题
http://code.google.com/p/linqtoexcel/
我强烈建议使用像一个图书馆的Excel数据读取器 ,并与托管代码中的数据。 这个名为CodePlex网站有做你需要什么的一个很好的例子。
这里有教程,应该让你开始了一把:
http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm
使用Excel互操作,你可以这样来做。 我假定函数名指向在Excel工作簿中定义的功能,否则你必须改变的那部分使用反射(但在这种情况下,你需要方法的接收器,和我没有看到一个在这个问题)。
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++;
}
额外票据以备将来参考。 只是想指出的是,与互操作性展示工作是凌乱。 最好的办法是使用库。