📗

【C#】特定のディレクトリ直下のExcelファイルのシート名を検索したい

2025/01/15に公開

このシート、どの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について

実行した際に、エラーが発生していたのですが
ライセンスの記述が必要であることが以下の記事でわかりました。
https://chawatoyo.blog.fc2.com/blog-entry-93.html

特に商用利用するわけではないので、以下を指定しました。

ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

商用利用が必要な場合はCommercialを設定したほうがよさそうです。

検索対象のファイルについて

今回私が探したいフォルダ内にxmlファイルが複数あり、エラーが発生していました。
そこで以下のようにExcelファイル(.xlsxのみ)を検索するようにしました。

            // フォルダ内およびサブディレクトリ内のすべてのExcelファイル(.xlsxのみ)を取得
            string[] excelFiles = Directory.GetFiles(folderPath, "*.xlsx", SearchOption.AllDirectories);
ラグザイア

Discussion