📗
【C#】特定のディレクトリ直下のExcelファイルのシート名を検索したい
このシート、どのExcelにあったっけ…
案件の中で複数のExcelファイルを扱うことがあったのですが、自分が作成したいものと同じようなシートがあったなあと探そうとしたころ、ファイル名はわからずシート名だけわかるという奇怪な状況が生まれました。
そこで、Windowsのエクスプローラで探せないか調べたのですが、無理そうだったので、ChatGPT君に頼ってちょっとしたコマンドラインのアプリを作りました。
実際のソース
using OfficeOpenXml; // EPPlusライブラリ
class Program
{
static void Main()
{
// ユーザーにフォルダパスの入力を求める
Console.WriteLine("フォルダパスを入力してください:");
string folderPath = Console.ReadLine();
// EPPlusライブラリのライセンス設定
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
// フォルダが存在するか確認
if (Directory.Exists(folderPath))
{
// フォルダ内およびサブディレクトリ内のすべてのExcelファイル(.xlsxのみ)を取得
string[] excelFiles = Directory.GetFiles(folderPath, "*.xlsx", SearchOption.AllDirectories);
if (excelFiles.Length > 0)
{
// 各Excelファイルについて処理
foreach (string filePath in excelFiles)
{
FileInfo fileInfo = new FileInfo(filePath);
Console.WriteLine($"ファイル名: {fileInfo.FullName}"); // フルパスを表示
// Excelファイルを開く
try
{
using (ExcelPackage package = new ExcelPackage(fileInfo))
{
// シート名を取得して表示
foreach (var sheet in package.Workbook.Worksheets)
{
Console.WriteLine($" シート名: {sheet.Name}");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"エラーが発生しました: {ex.Message}");
}
Console.WriteLine("--------------------------------");
}
}
else
{
Console.WriteLine("Excelファイルが見つかりませんでした。");
}
}
else
{
Console.WriteLine("フォルダが存在しません。パスを確認してください。");
}
Console.WriteLine("完了しました。");
}
}
実行後のイメージ
フォルダパスを渡すと以下の形で出力してくれます。
少し修正した部分
ChatGPT君にある程度作ってもらったものの、うまくいかなかった部分があったので
そこを備忘録程度に記載しておきます。
EPPlusについて
実行した際に、エラーが発生していたのですが
ライセンスの記述が必要であることが以下の記事でわかりました。
特に商用利用するわけではないので、以下を指定しました。
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
商用利用が必要な場合はCommercial
を設定したほうがよさそうです。
検索対象のファイルについて
今回私が探したいフォルダ内にxmlファイルが複数あり、エラーが発生していました。
そこで以下のようにExcelファイル(.xlsxのみ)を検索するようにしました。
// フォルダ内およびサブディレクトリ内のすべてのExcelファイル(.xlsxのみ)を取得
string[] excelFiles = Directory.GetFiles(folderPath, "*.xlsx", SearchOption.AllDirectories);

株式会社ラグザイア(luxiar.com)の技術広報ブログです。 ラグザイアはRuby on RailsとC#に特化した町田の受託開発企業です。フルリモートでの開発を積極的に推進しており、全国からの参加を可能にしています。柔軟な働き方で最新のソフトウェアソリューションを提供します。
Discussion