42

ExcelDataReaderC# で Excel ワークブックからデータを読み取るために使用しています。
しかし、私のExcelシートの構造は、読み取るデータが特定のセルから開始できるようなものであり、必ずしもそうではありませんA1

を使用してこれを達成する方法を提案してくださいExcelDataReader

4

8 に答える 8

31

より明確にするために、最初から始めます。

https://github.com/ExcelDataReader/ExcelDataReaderにあるサンプル コードを使用しますが、不便を避けるためにいくつかの変更を加えています。

次のコードは、xls または xlsx のいずれかのファイル形式を検出します。

FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader;

//1. Reading Excel file
if (Path.GetExtension(filePath).ToUpper() == ".XLS")
{
    //1.1 Reading from a binary Excel file ('97-2003 format; *.xls)
    excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
}
else
{
    //1.2 Reading from a OpenXml Excel file (2007 format; *.xlsx)
    excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
}

//2. DataSet - The result of each spreadsheet will be created in the result.Tables
DataSet result = excelReader.AsDataSet();

//3. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames = false;

これで、より便利な方法でファイルの内容にアクセスできるようになりました。これには DataTable を使用します。以下は、特定のセルにアクセスし、その値をコンソールに出力する例です。

DataTable dt = result.Tables[0];
Console.WriteLine(dt.Rows[rowPosition][columnPosition]);

DataTable を実行したくない場合は、次のように同じことができます。

Console.WriteLine(result.Tables[0].Rows[rowPosition][columnPosition]);

テーブルの制限を超えて読み取ろうとしないことが重要です。これにより、次のように行と列の数を確認できます。

Console.WriteLine(result.Tables[0].Rows.Count);
Console.WriteLine(result.Tables[0].Columns.Count);

最後に、完了したら、リーダーを閉じてリソースを解放する必要があります。

//5. Free resources (IExcelDataReader is IDisposable)
excelReader.Close();

お役に立てば幸いです。

(質問が古いことは理解していますが、このライブラリの特定の実装に関する資料がほとんどないため、知識ベースを強化するためにこの貢献をしています)。

于 2016-10-12T15:35:02.480 に答える