将类属性映射到Excel /电子表格列名称时的问题(使用LinqToExcel库时)

时间:2013-12-20 14:13:39

标签: c# .net excel linq linq-to-excel

以下是我的人员类

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }       
}

以下是我的代码尝试使用LinqToExcel DLL从ExcelSpreadSheet读取

public void UseLinqToExcel(string path)
{

    var excel = new ExcelQueryFactory();  
    excel.FileName = path;
    excel.DatabaseEngine = LinqToExcel.Domain.DatabaseEngine.Ace;

    //Use Explicit Mapping
    excel.AddMapping<Person>(x => x.Name, "Name");
    excel.AddMapping<Person>(x => x.Age, "Age");
    excel.AddMapping<Person>(x => x.Gender, "Gender");            
    var bob = from x in excel.Worksheet<Person>("Bob1")
                        select x;
}

以下是调用上述方法的代码

public void ReadFromExcelSpreadSheet()
{           
    UseLinqToExcel(@"C:\temp\people.xls");
}

以下是我的ExcelSpreadSheet数据示例。

Name     Age  Gender
----     ---  ------
John     23   Male
Shannon  22   Female 
Joseph   21   Male

问题是当我将断点设置为此行var bob = from excel.Worksheet(“Bob1”)中的x时,我可以看到对象bob正在填充一些数据。 但是,仅选择并填写性别值。名称和年龄值分别检索为null和0。 有人可以帮我解决这个问题吗?谢谢

1 个答案:

答案 0 :(得分:3)

由于属性和列名称完全相同,因此您无需使用AddMapping()执行任何映射

我猜测为什么没有返回Name和Age值,电子表格中的列名称之前或之后可能会有额外的空格。

您可以使用GetColumnNames()方法检索列名列表。 (这是该方法的文档:https://github.com/paulyoder/LinqToExcel#query-column-names