1

IList(of FinancialResults)VB.NET を使用してコレクションにインポートしようとしている XLSX スプレッドシートがあります。

スプレッドシートは以下の形式で、セルを適切な列からクラスにマップする必要があります。

スプレッドシート

スプレッドシート

モデル

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を使用することでしたが、ライブラリを使用してデータをロードする際に問題が発生しました。Web サイトのドキュメントを読んだところ、この機能は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メソッドを使用するか、各セルを個別にロードする必要がありますか?

別の好ましい代替手段はありますか?

4

1 に答える 1

2

レイアウトが原因で、LinqToExcel がスプレッドシートを読み取ることができません。

それを読む最も簡単な方法は、下の図に示すように、最初の行に列名が含まれるようにレイアウトを変更することです

ここに画像の説明を入力

于 2013-06-11T13:32:52.930 に答える