web-dev-qa-db-ja.com

ClosedXMLを使用してExcelファイルから読み取る

Excelファイルは表形式のデータではありません。 Excelファイルから読み取ろうとしています。 Excelファイル内に表形式のセクションがあります。

表である行3〜20をループして、データを読み取る必要があります。

ここに私のコードのパーティーがあります:

     string fileName = "C:\\Folder1\\Prev.xlsx";
     var workbook = new XLWorkbook(fileName);
     var ws1 = workbook.Worksheet(1); 

行3から20をループして、列3,4、6、7、8を読み取るにはどうすればよいですか?また、行が空の場合、各列に特定の行の値があることを読み取らずにスキップできるように、どのように決定するのですか。

22
Nate Pet

行にアクセスするには:

var row = ws1.Row(3);

行が空かどうかを確認するには:

bool empty = row.IsEmpty();

行のセル(列)にアクセスするには:

var cell = row.Cell(3);

セルから値を取得するには:

object value = cell.Value;
// or
string value = cell.GetValue<string>();

詳細については、 documentation を参照してください。

27
Raidri

RowsUsed()メソッドを使用して、空ではない行またはユーザーが編集した行のみのリストを取得することを好みます。このようにして、各行が空であるかどうかをチェックすることを回避できます。

あなたがあなたの投稿で説明した正確な問題ステートメントに合うかどうかはわかりませんが、このコードスニペットは、空を除外したので、すべての空でない行から3番目から20番目の行番号を処理するのに役立ちます処理を開始する前の行。処理を開始する前に空でない行をフィルタリングすると、実際に処理する行番号に影響を与える可能性があります。

しかし、Excelシートの行を処理する一般的なシナリオでは、RowsUsed()メソッドが非常に役立つと感じています。

string fileName = "C:\\Folder1\\Prev.xlsx";
using (var excelWorkbook = new XLWorkbook(fileName))
{
    var nonEmptyDataRows = excelWorkbook.Worksheet(1).RowsUsed();

    foreach (var dataRow in nonEmptyDataRows)
    {
       //for row number check
       if(dataRow.RowNumber() >=3 && dataRow.RowNumber() <= 20)
       {
           //to get column # 3's data
           var cell = dataRow.Cell(3).Value;
       }
    }
}
7
RBT

これが私のジャムです。

_var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row
foreach (var row in rows)
{
    var rowNumber = row.RowNumber();
    // Process the row
}
_

.RowsUsed()を使用する場合、範囲には膨大な数の列が含まれます。実際に記入される以上の方法!

したがって、最初に.RangeUsed()を使用して範囲を制限してください。これにより、ファイルをより速く処理できます。

.Skip(1)を使用して、列ヘッダー行(ある場合)をスキップすることもできます。

6
Jess