C# .NET6でExcelファイルを読書する場合NPOI と云うパッケージあります。NPOI はnuget で公開されていて、dotnet の「add package」コマンドを使えば簡単に利用できます。「add package」は下記のようにターミナルから実行します。
dotnet add package NPOI --version 2.5.5
Excelファイルを読み込んでセル内の文字列を取得
macOSのOffice365 からExcel でファイル新規作成しました。ファイル名は「Book1.xlsx」です。セルA1に「ジュアン・リコ」という文字列を入れました。
Excelファイルを新規作成しBook1.xlsxで保存
セルA1に入れた文字列をC# .NET6で取り出すコード例です。
using NPOI.XSSF.UserModel;
var book = new XSSFWorkbook ("Book1.xlsx" );
var sheet = book.GetSheet ("Sheet1" );
var row = sheet.GetRow (0 );
var cell = row.GetCell (0 );
Console.WriteLine (cell.StringCellValue);
最後の StringCellValueに「ジュアン・リコ」が入っていました。
VSCodeデバッグ実行
コード例はシンプルに書いていますが、sheetをGetRow()やGetCell()する場合は、その行に何も入っていなければ問答無用でnullが入ります。nullチェックなどの処理は必要かと思います。
Excelファイルにデータ入れて保存
読み込んだ先程のExcel ファイルのセルA1を書き換えて保存したい場合はStringCellValue()を使います。上のコードに下記を追記します
if (cell != null ){
cell.SetCellValue ("ロジャー・ヤング" );
}
Write()を実行するとセルA1の変更された内容が保存されます。
book.Write (new FileStream ("Book2.xlsx" ,FileMode.OpenOrCreate ));
Book2.xlsxというファイル名で保存しました。Book1で保存しなかった理由は、Office365 で新規作成したExcel ファイルに上書きするとデータがキレイに書けていないようでExcel で開くと下記のようなメッセージがでました。別ファイルで保存するとその後Excel で開くことも成功しました。
上書きするとExcelファイルが壊れた
他の行やセルにデータを入れたい場合はGetRow()でnullが返るのでCreateRow()したあとCreateCell()する必要があります。
var row1 = sheet.CreateRow (1 );
row1.CreateCell (0 ).SetCellValue ("キャンプ・カリー" );