使用序号位置引用LinqToExcel中的列

我处于一个非常不寻常的位置,就是有两个不同的Excel上传模板,一个是“人性化的”,一个是机器生成的。 因此,列数据标题是不同的,它们很难alignment。

因此,我想使用序号位置而不是列的“名称”来引用列映射。 目前我有这个:

var excel = new ExcelQueryFactory(excelFileName); excel.AddMapping<Student>(x => x.FirstName, "First Name"); excel.AddMapping<Student>(x => x.LastName, "Last Name"); excel.AddMapping<Student>(x => x.LastFour, "Last 4 Student ID"); excel.AddMapping<Student>(x => x.LastDate, "Last Date"); 

我想要做这样的事情:

 var excel = new ExcelQueryFactory(excelFileName); excel.AddMapping<Student>(x => x.FirstName, "A"); excel.AddMapping<Student>(x => x.LastName, "C"); excel.AddMapping<Student>(x => x.LastFour, "G"); excel.AddMapping<Student>(x => x.LastDate, "H"); 

其中的字母是Excel中的列引用。

有没有办法做到这一点?

如果你的订单是一样的,你可以打电话

  var columnnames= excel.GetColumnNames("worksheetName"); excel.AddMapping<Student>(x => x.FirstName, columnnames[0]); excel.AddMapping<Student>(x => x.FirstName, columnnames[1]); excel.AddMapping<Student>(x => x.LastFour, columnnames[2]); 

使用WorksheetNoHeader方法是你正在寻找的。 这是一个代码示例:

 var students = new List<Student>(); var excel = new ExcelQueryFactory("excelFileName"); var rows = excel.WorksheetNoHeader().ToList(); //Skip the first row since it's the header for (int rowIndex = 1; i < rows.Count; rowIndex++) { var row = rows[rowIndex]; var student = new Student(); // row[0] refers to the value in the first column of the row student.FirstName = row[0]; student.LastName = row[1]; student.LastFour = row[2]; student.LastDate = row[3]; students.Add(student); } 

从我看到的情况来看,在人性化列名和序号之间有一对一的映射关系。 我的build议是尝试实现一个Dictionary<string,string> ,其中键是列的名称,值是Excel中的列字母。 当然,字典只需要初始化一次,所以也许通过一个单例,或者作为一个静态的只读对象。

 //Initialize dictionary Dictionary<string,string> columnHeaders=new Dictionary<string,string>(); columnHeaders.Add("First Name", "A"); columnHeaders.Add("Last Name", "C"); columnHeaders.Add("Last 4 Student ID", "G"); columnHeaders.Add("Last Date", "H"); 

那么你的电话会

 var excel = new ExcelQueryFactory(excelFileName); excel.AddMapping<Student>(x => x.FirstName, columnHeaders["First Name"]); excel.AddMapping<Student>(x => x.LastName, columnHeaders["Last Name"]); excel.AddMapping<Student>(x => x.LastFour, columnHeaders["Last 4 Student ID"]); excel.AddMapping<Student>(x => x.LastDate, columnHeaders["Last Date"]);