我处于不同寻常的位置,为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中的列引用。
有办法做到这一点吗?
答案 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"]);