впервые спрашиваю здесь.Заранее благодарю за любую помощь, которую вы можете оказать.
Я пытаюсь прочитать кучу данных из электронной таблицы, порезать их, а затем выбросить в базу данных.Я бы не стал так поступать, но это основная реальность работы с типами бухгалтеров.К счастью, эти электронные таблицы очень последовательны.В любом случае, я использую LINQ для SQL, чтобы обрабатывать объектные ссылки, и я использую Microsoft.Office.Interop, чтобы получить Excel.
Я читаю каталог, полный .xls идля каждого я открываю файл, получаю пару конкретных данных из определенных ячеек, а затем получаю диапазон ячеек для выбора значений.
Private Sub ProcessAFile(ByVal f As FileInfo)
thisFile = openApp.Workbooks.Open(f.fullName)
thisMonth = Split(thisChart.Range("D6").Value, "-").Last.Trim
thisFY = thisChart.Range("L7").Value
thisWorkArea = thisChart.Range("A14", "L51").Value2
openApp.Workbooks.Close()
...
thisWorkArea было затемнено как глобальное:
Dim thisWorkArea As Object(,)
Я получаю строки и целые числа в моем диапазоне между A14 и L51, поэтому здесь имеет смысл сделать его массивом объектов.Я не хочу просматривать каждую строку и выбирать диапазоны в Excel, я просто хочу прочитать ее один раз, а затем закрыть ее.
Итак, я получаю следующее исключение:
Исключение System.IndexOutOfRangeException не обработано. Message = Индекс находится за пределами массива.
в этой функции:
Private Sub fillCurrMonth()
Dim theseRows As Integer() = {0, 2, 3, 5}
For Each i In theseRows
Dim thisMonth As New Month
'make sure category is in Database
thisMonth.Dept = thisDeptName
thisMonth.FY = thisFY
thisMonth.Category = thisWorkArea(i, 0)
...
«Месяц» выше относится к сущности LINQ.Ничего особенного.
В этой последней строке я улавливаю исключение.В моих часах я обнаружил, что thisWorkArea имеет длину 456 и (0,0) -> "Стационарный" {String}
Так почему я получаю это исключение?Я положил это в ваши экспертные руки.Я все еще довольно плохо знаком с vb.net, так что, возможно, я просто упускаю что-то фундаментальное.