Excelスプレッドシートからデータを読み書きする必要があります。 ExcelPackageを使用して、特定のワークシートにある行/列の数を調べる方法はありますか?私は次のコードを持っています:
FileInfo newFile = new FileInfo(@"C:\example.xlsx");
using (ExcelPackage xlPackage = new ExcelPackage(newFile))
{
ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets[1];
}
このワークシートにある各セルを反復処理してかなり大きなテーブルに吐き出す必要がありますが、空白のセルを印刷したり例外を取得したりしたくありません。 worksheet.rowNum
またはcolNum
に似たメソッドはありますか?
以下のように、ExcelPackage(EPPlus.dllバージョン3.0.0.2)を使用して行と列のカウントを取得できます。
var rowCnt = worksheet.Dimension.End.Row;
var colCnt = worksheet.Dimension.End.Column;
これが私がすることです:
ブックの値の配列を取得するには:
object[,] valueArray = sheet.Cells.GetValue<object[,]>();
範囲を取得するには、次の手順を実行します。
int rangeMaxRows = sheet.Dimension.End.Row;
int rangeMaxColumns = sheet.Dimension.End.Column;
まず、UsedRangeプロパティから開始し、UsedRangeの最終行の各セルに対してCell.End(xlUp)を実行します。これにより、各列の最終セルが取得されます。最大行インデックスを持つセルは、実際に使用されている範囲の最後のセルです。
セルがクリアされているが削除されていない場合、UsedRangeプロパティは更新されないため、UsedRangeプロパティが正しく表示されないことがあります。 UsedRangeプロパティを再び有効にするには、最後のセル(すべての空白セル)の後のすべての行と列を選択して、編集->削除を選択します。
int row = _excelSheet.Rows.CurrentRegion.EntireRow.Count;
int col = _excelSheet.Columns.CurrentRegion.EntireColumn.Count;
問題を解決するために、次のループを実行しました。事前に列の数がわかっている場合にのみ正常に機能します。それ以外の場合は、別のループ反復が必要になります。
int totalCells = 0;
int totalRows = -1;
do
{
totalRows++;
} while (worksheet.Cell(totalRows + 1, 1).Value != @"");
totalCells = totalRows * 12;
私は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++;
}
}
ExcelPackageライブラリを使用していくつかのWebサイトを検索しました。
また、codeplexのページには質問があります-行/列の数を取得する方法は?
サポートされていないようです。申し訳ありませんが、ドキュメントも利用できません。
行/列を反復処理し(スプレッドシートが保持できる最大の行/列に留意して)、セルに値が含まれているかどうかを確認する必要があります。
このリンクを参照してください- http://web.archive.org/web/20110123164144/http://nayyeri.net/use-excelpackage-to-manipulate-open-xml-Excel-files (originalリンク切れ)
行と列の合計を取得する最良の方法は、次のメソッドを使用することです。
int col = sheet.Dimension.Columns;
int row = sheet.Dimension.Rows;