первый раз спрашиваю здесь. Заранее благодарим за любую помощь, которую вы можете оказать.
Я пытаюсь прочитать кучу данных из электронной таблицы, нарезать их, а затем закинуть в базу данных. Я бы предпочел не делать вещи таким образом, но это основная реальность работы с типами бухгалтеров. К счастью, эти отчеты в виде электронных таблиц очень последовательны. Во всяком случае, я использую 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, поэтому здесь имеет смысл сделать его массивом Object. Я не хочу просматривать каждую строку и выбирать диапазоны в Excel, я хочу просто прочитать ее один раз, а затем закрыть.
Итак, я получаю следующее исключение:
Исключение System.IndexOutOfRangeException было необработанным. Сообщение = Индекс находился за пределами массива.
в этой функции:
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, поэтому, возможно, я просто упускаю что-то фундаментальное.