フォルダ内のファイル名を昇順にして最後のファイル名のみ取得したい

こんにちは!
数日悩んでいるのでご教示いただけると助かります。

フォルダ内に入っているエクセルファイル(3〜5個)を名前昇順にして一番下のファイル名(もしくはパス)を取得したいです。
※降順で一番上のファイル名でもよいです。

AAAというフォルダに
BBB_20240102.xlsx
BBB_20240204.xlsx
BBB_20240302.xlsx
というファイルが入っていたとします。

後ろの数字はファイルの作成日にしているため、平たくいえば最新ファイルのファイル名またはパスが知りたいです。
(エクセルプロセススコープでファイル名を指定するため)
「ファイルの更新日」では、古いファイルをうっかり上書き保存した時に最新ファイルをとれないのではと思っています。

ファイル名を昇順にして、最後のファイル名だけを取得できればいいのですが、何かいい方法はないでしょうか。
(例えばファイル名を昇順にする→上からファイル名を取得して変数に格納→2つめ以降は変数を上書きする→最後のファイルまで終われば最終的な変数は目的のファイル名が格納されている、とか)

こんにちは

BBB_の部分が固定であれば単純にソートして最後のファイル名を取得します。

System.IO.Directory.GetFiles("yourFolder").OrderBy(Function(f) f).Last()

BBB_の部分が変動するのであれば、例えば以下の様にすると良いかと思います。

System.IO.Directory.GetFiles("yourFolder").OrderBy(Function(f) System.Text.RegularExpressions.Regex.Match(System.IO.Path.GetFileNameWithoutExtension(f),"\d+$").Value).Last()

早速ありがとうございます。
BBB部分は固定です。

初歩的ですみません、「ExcelApplicationCard」アクティビティの「エクセルファイル名の指定」部分に書けば良いのでしょうか?

そこに書き込んでも動くと思いますが、可読性(保守性)が低下すると思いますので、代入アクティビティで事前に変数に代入しておいて、それをエクセルファイルを使用アクティビティで使う方が良いと思います。

あるいは単なるソートでしたら、下記の様に繰り返し(フォルダー内のファイル)を用いて、降順ソート、最初の項目を処理後すぐにループを抜ける方法でも良いかと思います。

1 Like

他のアクティビティでも使うので代入にして、無事に取得できました!
ありがとうございます!

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.