使用LinqToExcel导入数据

时间:2013-06-11 11:04:48

标签: .net vb.net linq linq-to-excel

我有一个XLSX电子表格,我试图使用VB.NET导入IList(of FinancialResults)集合。

电子表格采用以下格式,我需要将相应列中的单元格映射到类中。

电子表格

Spreadsheet

模型

Public Class FinancialResults
    Friend Property MonthBudget As Single
    Friend Property MonthActual As Single
    Friend Property YearToDateBudget As Single
    Friend Property YearToDateActual As Single
    Friend Property FullYearForcastBudget As Single
    Friend Property FullYearForcastActual As Single
    Friend Property NextMonthBudget As Single
    Friend Property NextMonthActual As Single
End Class

代码

我的初步观点是使用我通过NuGet安装的LinqToExcel但是我在使用库加载数据时遇到问题。通过阅读网站上的文档,我发现AddMapping方法

可以提供此功能
ExcelEngine.AddMapping(Of FinancialResults)(Function(m) m.MonthBudget, "D")
ExcelEngine.AddMapping(Of FinancialResults)(Function(m) m.MonthActual, "E")
ExcelEngine.AddMapping(Of FinancialResults)(Function(m) m.YearToDateBudget, "H")
ExcelEngine.AddMapping(Of FinancialResults)(Function(m) m.YearToDateActual, "I")
ExcelEngine.AddMapping(Of FinancialResults)(Function(m) m.FullYearForcastBudget, "L")
ExcelEngine.AddMapping(Of FinancialResults)(Function(m) m.FullYearForcastActual, "M")
ExcelEngine.AddMapping(Of FinancialResults)(Function(m) m.NextMonthBudget, "P")
ExcelEngine.AddMapping(Of FinancialResults)(Function(m) m.NextMonthActual, "Q")

然后使用下面的Linq语句加载数据。

Dim var = (From r In ExcelEngine.Worksheet(Of FinancialResults)(excelPageName)
           Select r).ToList

结果

代码编译并运行但结果未从电子表格加载。 FinacialResults类的所有实例都填充了0.0

enter image description here

确定列映射可能有问题我使用

查询ExcelQueryFactory的列集合
Dim cols = ExcelEngine.GetColumnNames(excelPageName)

返回以下内容。

enter image description here

我更改了列映射以反映这些,但是对于所有实例,结果再次返回0.0。

ExcelEngine.AddMapping(Of FinancialResults)(Function(m) m.MonthBudget, "F4")
ExcelEngine.AddMapping(Of FinancialResults)(Function(m) m.MonthActual, "F5")

问题

考虑到此电子表格的格式,是否可以使用LinqToExcel?如果是这样,我做错了什么?我应该使用WorksheetRange方法还是单独加载每个单元格?

还有其他更好的选择吗?

1 个答案:

答案 0 :(得分:2)

由于LinqToExcel的布局,LinqToExcel无法读取您的电子表格。

最简单的方法是更改​​布局,使第一行包含列名,如下图所示

enter image description here