从Excel中检索“行对”

我正在尝试使用C#从Excel电子表格中检索数据。 电子表格中的数据具有以下特征:

  • 没有列名被分配

  • 行可以有不同的列长度

  • 某些行是元数据,这些行标记下一行中列的内容

因此,我需要构build的对象将始终在第一列中有其名称,其参数包含在下一列中。 参数名称从上面的行中检索是很重要的。 一个例子:

row1|---------|FirstName|Surname| row2|---Person|Bob------|Bloggs-| row3|---------|---------|-------| row4|---------|Make-----|Model--| row5|------Car|Toyota---|Prius--| 

所以不幸的是数据是异构的,确定哪些行“属于同一个”的唯一方法是检查行中的第一列是否为空。 如果是,则读取该行中的所有数据,并通过检查上面的行来检查哪些参数名称适用。 起初我认为直接的方法是简单地循环

1)包含所有工作表的数据集
2)数据表(即表)和
3)行。

但是,我发现试图使用嵌套循环提取这些数据,并且如果语句导致可怕,不可读和不灵活的代码。 有没有办法在LINQ中做到这一点? 我看过这篇文章 ,首先过滤数据之间的空行,但没有真正到达任何地方。 请问有人可以用一些代码片段指向正确的方向吗?

提前致谢 ! 弘

我看到你已经接受了答案,但我认为更通用的解决scheme是可能的 – 使用反思。

假设你的数据是一个List<string[]> ,其中列表中的每个元素都是一个string数组,并包含相应行的所有单元格。

 List<string[]> data; data = LoadData(); var results = new List<object>(); string[] headerRow; var en = data.GetEnumerator(); while(en.MoveNext()) { var row = en.Current; if(string.IsNullOrEmpty(row[0])) { headerRow = row.Skip(1).ToArray(); } else { Type objType = Type.GetType(row[0]); object newItem = Activator.CreateInstance(objType); for(int i = 0; i < headerRow.Length; i++) { objType.GetProperty(headerRow[i]).SetValue(newItem, row[i+1]); } results.Add(newItem); } }