privatestring Read(string filePath, string address)
{
using var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using var book = new XLWorkbook(stream);
var sheet = book.Worksheets.FirstOrDefault();
if (sheet == null) return"";
var cell = sheet.Cell(address);
return cell?.GetValue<string>() ?? "";
}
細かいポイントだけど new XLWorkbook(filePath) でもいいのに stream で渡しています。ファイルパスを直接渡してしまうと、EXCEL を開きながらセルのデータを取得できないからですね。以下の例外が発生してしまうと面倒なので。
拡張メソッドをまとめたようなライブラリーの名前空間 using 句をすべてのプログラムファイルに記述するのは、「わかりきっているため」冗長に感じることがあります。
そういうときは、思い切って global using を使うのもよいと思います。
わかりきっているような using は、今となっては得られる情報もすくないので、省略するような感じです。(たとえば、以下の using 句の並びは見慣れたものだと思います)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
global using を利用する際は、using.cs や imports.cs ファイルなどプロジェクトごとに1つのファイルで実施するようにしましょう。やたらめったらに書くと混乱します。
個人的なシーンでは、毎回使うような独自のオリジナルライブラリーを持っていると、プロジェクトのたくさんのファイルに using を追加する必要があって面倒だったりします。
特に拡張メソッドを定義した名前空間なんかは、なるべく共有したいので、大きいプロジェクトでは global using 用のファイルを1つ生成しておきます。
global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.Text;
global using System.Threading.Tasks;
// コメント
global using MyLibrary.Extensions;
Unable to create a constant value of type '***.Services.Db.Interfaces.IEndUser'.
Only primitive types or enumeration types are supported in this context