ここでは、オープンソースである NPOI を使ってシート上で使用されているセルの最終行・最終列を取得するサンプルコードを掲載しています。
スポンサーリンク
NPOI によるシート上の最終行・最終列の取得は各行に対して、それぞれ使用されている最終列を取得することになります。すべての行を対象にして使用されている最終列の最大値を一気に取得することはできないようです(メイビー)。
最終行・最終列を取得するサンプルコード
シートで使用されている最終行・最終列のインデックスを取得するサンプルコードです。詳細はサンプル内のコメントを参照ください。
C#
string filePath = @"path/to/exce.xls"; IWorkbook wb; // エクセルファイルをオープン // 他プロセスがエクセルを開いていても例外とならないようにFileShare.ReadWriteを設定 using (FileStream infile = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { // エクセルファイルを開いて内容を取得(ワークブックオブジェクトを作成) wb = WorkbookFactory.Create(infile, ImportOption.All); } // シート名(Sheet2)を指定してシートオブジェクトを取得 ISheet sheet = wb.GetSheet("Sheet2"); // シートで使用されている行の最終行インデックスを取得 for (int i=0; i<=sheet.LastRowNum; i++) { // 行オブジェクトを取得 IRow row = sheet.GetRow(i); // 行で使用されている最終列のインデックスを取得 /* * ??? 最終列インデックス+1が取得されているように思う */ for (int j=0; j<=row.LastCellNum; j++) { // セルオブジェクトを取得 ICell cell = sheet.GetRow(i).GetCell(j); } }
最終行判断が列先頭の場合では有効ですが、
例えば1列目は10行まであり、2列目は50行ある場合、
そういう場合は最終行は10行になってしまいますが、
そういった時はどうしましょ