第一次在这里提问。提前感谢您提供的任何帮助。
我正在尝试从电子表格中读取一堆数据,将其切碎,然后将其放入数据库中。我宁愿不这样做,但这是与会计类型打交道的基本现实。值得庆幸的是,这些电子表格报告非常一致。无论如何,我正在使用 LINQ for 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=Index 超出了数组的范围。
在这个函数中:
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) -> "Inpatient"{String}
那么为什么我会得到这个异常呢?我把它交给你的专家。我对 vb.net 还是很陌生,所以也许我只是缺少一些基本的东西。