【问题标题】:Importing data with LinqToExcel使用 LinqToExcel 导入数据
【发布时间】:2013-06-11 11:04:48
【问题描述】:

我有一个 XLSX 电子表格,我正在尝试使用 VB.NET 将其导入到 IList(of FinancialResults) 集合中。

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

电子表格

型号

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

发现列映射可能有问题,我使用查询ExcelQueryFactory 的列集合

Dim cols = ExcelEngine.GetColumnNames(excelPageName)

返回以下内容。

我更改了列映射以反映这些情况,但所有实例的结果再次返回为 0.0。

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

问题

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

还有其他更好的选择吗?

【问题讨论】:

  • 您说“我有一个 XLSX 电子表格,我正在尝试使用 VB.NET 导入。”您想将电子表格导入到哪里?这可以帮助我帮助您确定是否有“首选替代方案”。
  • 最初是一个 IList(Of FinacialResults) 对象。然后将其映射到数据库。我看过使用 SSIS 包,但仅限于在服务器上可以做的事情。

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢保罗。我通过单独阅读每个单元格来解决它。性能不是很好,但它每周导入一次,所以这不是一个真正的问题。
  • 我无法更改电子表格,因为它来自我们的业务,他们不愿意
  • @PhilMurray 不改变布局有没有办法读取数据?我需要我的 excel 和类之间的映射,以便我可以查询它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多