1

C# で Excel ファイルからセルを多次元配列に抽出しようとしています。次のコード スニペットがあります。

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 行は、次のように正しく印刷されます。

2
117
"IndexOutOFRangeException"

長さがそれぞれ 2 と 117 の場合、配列の 0,0 の位置に何かが存在するべきではありませんか? ここで何が間違っていますか?

4

1 に答える 1

0

いくつかのコメントが言ったように、C# の Excel 型は 1 ベースです。

コードで、作成した最初のワークシートを開く

// index is 1
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];

ワークブックの最初のシートのインデックスは 0 ではなく 1 です。

dataArray からデータを取得する場合は、[1,1] から開始する必要があります。

// will write to top left value from your worksheet
Console.WriteLine(dataArray[1, 1]);

ワークシートの名前はデフォルトで「Sheet1」「Sheet2」で、行は1から始まり、A0がないため、1ベースの配列を使用したと思います。

エクセル

普通の人にとっては理にかなっているように見えますが、0ベースの配列に慣れている私たち開発者にとっては奇妙に見えます。

于 2014-02-27T00:04:18.147 に答える