1

我正在尝试将 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 位置不应该存在某些东西吗?我在这里做错了什么?

4

1 回答 1

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 的数组的开发人员来说,它看起来很奇怪。

于 2014-02-27T00:04:18.147 回答