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

时间:2014-06-04 21:22:27

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

我处于不同寻常的位置,为Excel上传提供了两个不同的模板,一个是“人性化的”,一个是机器生成的。因此,列数据头是不同的,很难对齐它们。

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

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中的列引用。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:11)

如果您订购的相同,则可以致电

        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]);

答案 1 :(得分:6)

使用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);
}

答案 2 :(得分:1)

从我看到的情况来看,你在人性化的列名和序数字之间有一对一的映射。我的建议是尝试实现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"]);
相关问题