LinqToExcel重复列名称

时间:2016-01-07 18:05:58

标签: c# excel linq-to-excel

我有一台机器生成的excel文件,其中有几列具有相同的名称。 e.g:

  A       B          C       D
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的内容时,我看到了所有的&#39; Second&#39;属性与“第一”属性具有相同的值。的。

This post是我在搜索中找到的最接近的东西,我认为问题可以通过以下方式解决:

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:我后面还有一些代码,但我认为它与问题无关。

1 个答案:

答案 0 :(得分:1)

你现在无法使用LinqToExcel来解决问题,因为它包装了OleDb函数,然后根据列名映射属性,因此你会丢失指定列的“FN”等OleDb选项(如“ F1“for”A“)。

LinqToExcel github repo上存在一个问题。 https://github.com/paulyoder/LinqToExcel/issues/85

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

另一种选择是在excel文件中创建多个查询,范围将您的组拆分,然后再合并结果。

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

编辑:我将使用一个功能来尝试以优雅的方式解决此问题,因此将来您可以使用更灵活的选项来映射列和属性(如果他们接受我的Pull请求)