LinqToExcel重复列名称

我有一台机器生成的Excel文件,有几个同名的列。 例如:

ABCD Group 1          Group 2 Period | Name     Period | Name 

我有这样一个DTO:

 [ExcelColumn("Period")] public string FirstPeriod { get; set; } [ExcelColumn("Name")] public string FirstName { get; set; } [ExcelColumn("Period")] public string SecondPeriod { get; set; } [ExcelColumn("Name")] public string SecondName { get; set; } 

我使用以下命令来读取行:

 var excel = new ExcelQueryFactory(filePath); excel.WorksheetRange<T>(beginCell, endColl + linesCount.ToString(), sheetIndex); 

它读取文件很好,但是当我检查我的DTO的内容时,我看到所有'Second'属性都具有相同的'First'值。

这篇文章是我在我的search中发现的最接近的东西,我认为这个问题可以用这样的东西来解决:

 excel.AddMapping<MyDto>(x => x.FirstPeriod, "A"); excel.AddMapping<MyDto>(x => x.FirstName, "B"); excel.AddMapping<MyDto>(x => x.SecondPeriod, "C"); excel.AddMapping<MyDto>(x => x.SecondName, "D"); 

但我不知道如何获得Excel专栏…

Obs:我有更多的代码,但我不认为它与问题有关。

你现在遇到的问题是不能用LinqToExcel解决的,因为它包装了OleDb函数,然后他们根据列名映射属性,所以你失去了指定列的“FN”这样的OleDb选项(比如“F1” “一个”)。

LinqToExcel github回购有关这个问题。 https://github.com/paulyoder/LinqToExcel/issues/85

如果由于机器生成而无法更改,我build议您将列的名称更改为不重复的名称(例如Period1,Name1,Period2,Name2),请尝试在运行时更改标题名称。

另一个select是在Excel文件中创build多个查询,范围分割您的组,然后合并结果。

 var excel = new ExcelQueryFactory(filePath); var group1 = excel.WorksheetRange<T>(A1, B + rowCount); var group2 = excel.WorksheetRange<T>(C1, D + rowCount); 

编辑:我将在一个function上尝试以优雅的方式来解决这个问题,所以也许将来你会有一个更灵活的选项来映射列和属性(如果他们接受我的请求)