我正在尝试将excel文件中的单元格提取到C#中的多维数组中。我有以下代码段:
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(this.pathToFile);
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;
Object[,] dataArray;
dataArray = (System.Object[,])xlRange.Value2;
Console.WriteLine(dataArray.GetLength(0));
Console.WriteLine(dataArray.GetLength(1));
Console.WriteLine(dataArray[0,0]); //As a test
代码一直运行到最后一行,它抛出一个IndexOutOfRange异常。该行上方的两行正确打印:
2
117
"IndexOutOFRangeException"
如果长度分别为2和117,那么数组中的0,0位置是否应该存在某些东西?我在这里做错了什么?
答案 0 :(得分:0)
正如一些评论所说,C#中的Excel类型是从1开始的。
在您的代码中打开您编写的第一个工作表
// index is 1
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
工作簿中第一张工作表的索引是1,而不是0。
当您想从dataArray获取数据时,您应该从[1,1]
开始// will write to top left value from your worksheet
Console.WriteLine(dataArray[1, 1]);
我认为他们使用了基于1的数组,因为工作表默认名为“Sheet1”“Sheet2”,行从1开始,你没有A0。
对于任何普通人来说似乎都是合乎逻辑的,但对于我们来说,使用基于0的阵列的开发人员看起来很奇怪。