1

EPPLUS を使用して C# .NET 4.0 でアプリケーションをコーディングしており、20 MB の巨大な Excel ファイルを読み込もうとしています。Find または Findall メソッドを使用して、シート内の特定の文字列を検索したいと考えています。インターネット上にこれに関する情報がないため、誰でもこれを行う方法のスニペットを共有できますか.

時間がかかるので、すべてのセルを読み取ることは避けたいです。その特定の文字列を見つけて、シート全体を読み取らずにその特定の行をコピーしたいだけです。

ありがとうございました。

4

1 に答える 1

7

ExcelDataValidationCollection の Find および FindAll メソッドは、ワークブック/ワークシート内の文字列を検索するためのものではありません。代わりに、ラムダ式を使用してワークシート内の特定のデータ検証を検索できます。

ワークシートに一致する値を照会する場合は、おそらく Linq が最適な方法です。シート全体をループする必要がないように、クエリで範囲を指定できます。この例は、codeplex でダウンロードできる EPPlus サンプルのサンプル 8 からのものです。

//Here we use more than one column in the where clause. We start by searching column D, then use the Offset method to check the value of column C.
            var query3 = (from cell in sheet.Cells["d:d"]
                          where cell.Value is double && 
                                (double)cell.Value >= 9500 && (double)cell.Value <= 10000 && 
                                cell.Offset(0, -1).GetValue<DateTime>().Year == DateTime.Today.Year+1 
                          select cell);

            Console.WriteLine();
            Console.WriteLine("Print all cells with a value between 9500 and 10000 in column D and the year of Column C is {0} ...", DateTime.Today.Year + 1);
            Console.WriteLine();    

            count = 0;
            foreach (var cell in query3)    //The cells returned here will all be in column D, since that is the address in the indexer. Use the Offset method to print any other cells from the same row.
            {
                Console.WriteLine("Cell {0} has value {1:N0} Date is {2:d}", cell.Address, cell.Value, cell.Offset(0, -1).GetValue<DateTime>());
                count++;
            }
于 2012-07-01T07:22:22.103 に答える