UiPath XAMLファイルのDisplayName属性に連番インデックスを自動追加するツール
UiPathワークフローの各アクティビティに [1]、[2]、[3] のような番号を自動で振ります。
デバッグ時やログ確認時に「どのアクティビティか」を素早く特定できます。
処理前:
<Sequence DisplayName="メイン処理">
<Assign DisplayName="変数セット">
<WriteLine DisplayName="ログ出力">
処理後:
<Sequence DisplayName="[1] メイン処理">
<Assign DisplayName="[2] 変数セット">
<WriteLine DisplayName="[3] ログ出力">
ポイント: 元のDisplayNameの前に [番号] を追加するだけ
DisplayName属性がないアクティビティには、要素名をDisplayNameとして自動追加します。
処理前:
<Sequence> ← DisplayNameなし
<Assign DisplayName="変数セット">
処理後:
<Sequence DisplayName="[1] Sequence"> ← 自動追加
<Assign DisplayName="[2] 変数セット">
[...] で始まるDisplayNameは処理をスキップします。
処理前:
<Sequence DisplayName="[99] 既存の番号"> ← スキップ対象
<Assign DisplayName="変数セット">
<WriteLine DisplayName="[CHI-001] チケット番号付き"> ← スキップ対象
処理後:
<Sequence DisplayName="[99] 既存の番号"> ← そのまま
<Assign DisplayName="[1] 変数セット"> ← 新規採番
<WriteLine DisplayName="[CHI-001] チケット番号付き"> ← そのまま
ポイント: [数字] でも [文字列] でも、[...] で始まっていればスキップ
既に使われている数字は、新規採番で使いません。
処理前:
<Sequence DisplayName="[3] 既存"> ← 3は使用済み
<Assign DisplayName="処理A">
<WriteLine DisplayName="[5] 既存"> ← 5は使用済み
<If DisplayName="処理B">
処理後:
<Sequence DisplayName="[3] 既存"> ← そのまま
<Assign DisplayName="[1] 処理A"> ← 1を採番
<WriteLine DisplayName="[5] 既存"> ← そのまま
<If DisplayName="[2] 処理B"> ← 2を採番(3はスキップ、4を採番、5はスキップ...ではなく、単純に次の空き番号)
採番の流れ:
- 開始番号 = 1
- 「処理A」に1を振る → 次は2
- 「処理B」に2を振る → 次は3だが、3は使用済みなので4へ
- 以降も同様に、使用済みの番号はスキップ
フォルダ内の複数ファイルを処理する場合、全ファイルで通し番号になります。
フォルダ構成:
MyProject/
├── Main.xaml
└── Sub.xaml
処理後:
Main.xaml:
[1] メイン処理
[2] サブ呼び出し
Sub.xaml:
[3] サブ処理 ← Main.xamlからの続き
[4] データ処理
ポイント: ファイルごとに1から始まるのではなく、プロジェクト全体で連番
同じ番号が複数のファイルや要素に存在する場合、全ての重複要素を採番し直します。
処理前:
Main.xaml:
<Sequence DisplayName="[3] 処理A">
Sub.xaml:
<Sequence DisplayName="[3] 処理B"> ← [3]が重複!
処理後:
Main.xaml:
<Sequence DisplayName="[1] 処理A"> ← 採番し直し
Sub.xaml:
<Sequence DisplayName="[2] 処理B"> ← 採番し直し
ポイント: 重複があると全ての重複要素が新しい番号に置き換わる
# ビルド
dotnet build
# フォルダ内の全XAMLを処理
dotnet run -- "C:\prj\UiPath\MyProject"
# まず確認だけ(ドライモード)
dotnet run -- "C:\prj\UiPath\MyProject" --dry-run| 引数 | 説明 | デフォルト |
|---|---|---|
<パス> |
XAMLファイルまたはフォルダ | 必須 |
-s, --start |
開始番号 | 1 |
-b, --backup |
バックアップ作成 | true |
-d, --dry-run |
変更せず確認のみ | false |
# 0から開始
dotnet run -- "C:\prj\UiPath\MyProject" -s 0
# バックアップなし
dotnet run -- "C:\prj\UiPath\MyProject" -b false| 処理対象 | バックアップ形式 | 例 |
|---|---|---|
| フォルダ | フォルダ名_backup_日時 |
MyProject_backup_20260107_143025 |
| 単一ファイル | ファイル名.bak |
Main.xaml.bak |
| ドライモード | 作成しない | - |
以下のUiPathアクティビティを認識します(DisplayNameがなければ自動追加):
制御: Sequence, Flowchart, If, Switch, While, DoWhile, ForEach, TryCatch, Throw ...
UI操作: Click, TypeInto, SendHotkey, GetText, FindElement, ElementExists ...
Excel: ExcelApplicationScope, ReadRange, WriteRange, ReadCell, WriteCell ...
データ: BuildDataTable, AddDataRow, FilterDataTable, ReadCSV, WriteCSV ...
ファイル: FileExists, ReadTextFile, WriteTextFile, CopyFile, DeleteFile ...
その他: Assign, InvokeWorkflowFile, LogMessage, Delay, Comment ...
※ FlowStep、FlowDecision、Catch 等はDisplayNameをサポートしないためスキップ
- .NET 8.0 / C# 12
- LINQ to XML
- UTF-8 (BOMなし) で保存
- Serilog でログ出力(
logs/フォルダ)
UiPathDisplayName/
├── Program.cs # エントリーポイント
├── XamlIndexer.cs # コアロジック
├── XamlIndexer.csproj # プロジェクト設定
└── README.md
MIT License