web-dev-qa-db-ja.com

C#:ExcelPackageで行/列の数を取得する

Excelスプレッドシートからデータを読み書きする必要があります。 ExcelPackageを使用して、特定のワークシートにある行/列の数を調べる方法はありますか?私は次のコードを持っています:

FileInfo newFile = new FileInfo(@"C:\example.xlsx");
using (ExcelPackage xlPackage = new ExcelPackage(newFile)) 
{
    ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets[1];
}

このワークシートにある各セルを反復処理してかなり大きなテーブルに吐き出す必要がありますが、空白のセルを印刷したり例外を取得したりしたくありません。 worksheet.rowNumまたはcolNumに似たメソッドはありますか?

34
Napoli

以下のように、ExcelPackage(EPPlus.dllバージョン3.0.0.2)を使用して行と列のカウントを取得できます。

  var rowCnt = worksheet.Dimension.End.Row;
  var colCnt = worksheet.Dimension.End.Column;
41
Kwex

これが私がすることです:

ブックの値の配列を取得するには:

object[,] valueArray = sheet.Cells.GetValue<object[,]>();

範囲を取得するには、次の手順を実行します。

int rangeMaxRows = sheet.Dimension.End.Row; 
int rangeMaxColumns = sheet.Dimension.End.Column;
12
EdsonF

まず、UsedRangeプロパティから開始し、UsedRangeの最終行の各セルに対してCell.End(xlUp)を実行します。これにより、各列の最終セルが取得されます。最大行インデックスを持つセルは、実際に使用されている範囲の最後のセルです。

セルがクリアされているが削除されていない場合、UsedRangeプロパティは更新されないため、UsedRangeプロパティが正しく表示されないことがあります。 UsedRangeプロパティを再び有効にするには、最後のセル(すべての空白セル)の後のすべての行と列を選択して、編集->削除を選択します。

6
avid
int row = _excelSheet.Rows.CurrentRegion.EntireRow.Count;
int col = _excelSheet.Columns.CurrentRegion.EntireColumn.Count;
5
rebelphuong

問題を解決するために、次のループを実行しました。事前に列の数がわかっている場合にのみ正常に機能します。それ以外の場合は、別のループ反復が必要になります。

int totalCells = 0;
int totalRows = -1;

do
{
     totalRows++;
} while (worksheet.Cell(totalRows + 1, 1).Value != @"");
totalCells = totalRows * 12;
3
Napoli

私はsheet.UsedRangeを単独で使用していましたが、範囲の最後のいくつかのセルは空白でしたが、まだ範囲に含まれていました。

これは機能しますが、効率を上げるために、範囲の最後の行をじっと見て、データの終了位置を確認することをお勧めします(このスニペットは最初の行から始まります!)

        int count = 0;
        E.Range excelRange = sheet.UsedRange;
        object[,] valueArray = (object[,])excelRange.get_Value(E.XlRangeValueDataType.xlRangeValueDefault);
        if (valueArray.GetUpperBound(0) > 1)
        {
            for (int i = 0; i < valueArray.GetUpperBound(0) + 2; i++)
            {
                if (valueArray[i + 2, 1] == null)
                    break;
                else
                    count++;
            }
        }
1
BIDeveloper

ExcelPackageライブラリを使用していくつかのWebサイトを検索しました。
また、codeplexのページには質問があります-行/列の数を取得する方法は?

サポートされていないようです。申し訳ありませんが、ドキュメントも利用できません。
行/列を反復処理し(スプレッドシートが保持できる最大の行/列に留意して)、セルに値が含まれているかどうかを確認する必要があります。

このリンクを参照してください- http://web.archive.org/web/20110123164144/http://nayyeri.net/use-excelpackage-to-manipulate-open-xml-Excel-files (originalリンク切れ)

1
shahkalpesh

行と列の合計を取得する最良の方法は、次のメソッドを使用することです。

int col = sheet.Dimension.Columns;
int row = sheet.Dimension.Rows;
0
Leonardo Pinho