2013-06-11 3 views
1

У меня есть таблица XLSX, которую я пытаюсь импортировать в коллекцию IList(of FinancialResults), используя VB.NET.Импорт данных с LinqToExcel

Электронная таблица находится в нижнем формате, где мне нужно отображать ячейки из соответствующих столбцов в класс.

Spreadsheet

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 

Код

Мой первоначальный вид был использовать LinqToExcel ВГ ich я установил через NuGet, но у меня возникают проблемы с загрузкой данных с помощью библиотеки. От чтения документации на веб-сайте я обнаружил, что эта функциональность может быть обеспечена с помощью метода 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 или загружать каждую ячейку отдельно?

Есть ли другая предпочтительная альтернатива?

+0

Вы говорите: «У меня есть таблицы XLSX, что я пытаюсь импортировать используя VB.NET. " Где вы пытаетесь импортировать электронную таблицу? Это может помочь мне помочь вам определить, может ли быть «предпочтительная альтернатива». – STLDeveloper

+0

Изначально объект IList (Of FinacialResults). Затем он будет привязан к базе данных. Я посмотрел на использование пакета SSIS, но ограничился тем, что могу сделать на сервере. –

ответ

2

LinqToExcel не может прочитать таблицу, которую вы имеете из-за своей компоновки.

Самый простой способ, чтобы прочитать его, чтобы изменить макет таким образом, первая строка содержит имена столбцов, как на рисунке ниже показан

enter image description here

+1

Спасибо, Пол. Я обошел его, читая каждую ячейку индивидуально. Perf невелик, но его раз в неделю импортируют, так что это не проблема. –

+0

Я не могу изменить таблицу как ее из нашего бизнеса, и они не желают –

+0

@PhilMurray без изменения макета есть ли способ прочитать данные? Мне нужно сопоставление между моим excel и классом, поэтому я могу запросить его. – Eldho

Смежные вопросы