LinqToExcel解析数据透视

时间:2016-03-27 16:32:29

标签: c# excel linq

我一直在尝试使用LinqToExcel库解析excel文件。我的excel文件有以下" design":

Property1   |   Property2   |   HasExtraProperty1   |   HasExtraProperty2   |  HasExtraProperty3
------------|---------------|-----------------------|-----------------------|-------------------
   foo      |     bar       |          yes          |          yes          |         no
   barfoo   |     foobar    |          no           |          no           |         yes
   barbar   |     foofoo    |          no           |          yes          |         no

我的模型的抽象看起来像这样:

class MyModel
{
        List<ExtraProperties> extraProperties;
        String property1;
        String property2;
}

我使用库中的映射来轻松地将(在此示例中)String属性映射到列。这一切都很流利,但现在我解析了其他属性。只有带有&#34;是&#34;的额外属性应该添加到列表中。有关如何使用linq查询解决此问题的任何想法?

注1:为了面向未来,额外属性的数量应该可以变化。

注意2:我考虑使用其他库,但我已经在项目的某个地方使用了LinqToExcel,并且我试图将依赖项保持在最低限度。

1 个答案:

答案 0 :(得分:0)

似乎最简单的解决方案是放弃LinqToExcel提供的方便映射,并循环遍历每个列名/行。

IExcelQueryFactory fact = new ExcelQueryFactory(path);
var query = from r in fact.Worksheet(0)
            select r;
IList<MyModel> models = new List<MyModel>();
foreach(var row in query){
    MyModel m = new MyModel();
    foreach(String colName in MyColMapping.Keys){
        p.GetType().GetProperty(colName).SetValue(p, row[ColMapping[colName]]);
    }
    foreach(ExtraProperty p in PMapping.Keys){
        if(row[PMapping[p]].Equals("yes"))
            m.ExtraProperties.Add(p);
    }
    models.add(m);
}

注意:ColMapping是一个字典,它使用model-properties映射excel-columns的名称。 PMapping是一个字典,它将excel-columns与额外属性的正确对象进行映射。