Power AutomateでDropboxフォルダにドロップされたすべてのPDFを自動的に結合する:6ステップの動的ワークフロー

「これらの PDF を結合する」チケットの苦痛な部分は結合ではなく、 実行時にフォルダの中身を把握する名前が変わったり、ファイルが出入りしたり、誰かが午後4時55分に5つ目のドキュメントを追加したりします。このウォークスルーでは、正確なパターンを構築します。 パワーオートマタ と PDF4meで複数のPDFファイルを結合する、 Dropbox、そして各ループに 1 つの適用処理があります。フローアクションは 6 つ。ファイル名はハードコードされていません。監視対象フォルダにあるすべての PDF ファイルは、新しいファイルが到着した瞬間に結合され、出力名にはファイル数が含まれるため、各実行が一意に識別されます。
A ファイルが作成されると Dropboxのトリガーは、新しいファイルがアップロードされるたびに作動します。 フォルダ内のファイル一覧 現在フォルダ内にあるすべてのファイルのスナップショットを返します(今回の実行では、4 つの PDF ファイルです)。 PDF_Sample.pdf、 sample_3_page.pdf、 sample_pdf.pdf、 sample.pdf) Apply to each ループはリストを走査し、呼び出します。 ファイルの内容を取得する Id によって、そしてプッシュします base64ToBinary(body('Get_file_content')?['$content']) 配列変数に ファイルPDF4meの 複数のPDFファイルを結合する 配列を消費し、1つのPDFを出力します。Dropbox ファイルを作成する 書き戻すと merge-4.pdf入力ファイルが4つあったためです。明日5つ目のファイルを追加すると、次の実行で次の結果が得られます。 merge-5.pdf 自動的に。
なぜ?という問いに対する質疑応答
トリガーとフォルダ内のファイル一覧表示を一緒に使用する理由は何ですか? このトリガーは、新規ファイルイベントを1つだけ提供しますが、フォルダ内の他のすべてのファイルの最新リストを保証するものではありません。 フォルダ内のファイル一覧 実行時に現在の状態をスナップショットするため、マージは常に、トリガーが発火した時やフローが設計された時の状態ではなく、現在ディスク上に存在する状態を正確に反映します。
パスではなくIDで取得する理由は何ですか? ファイル名は衝突したり変更されたりする可能性があります。Dropbox IDは安定しており、一意であり、名前変更の影響を受けません。マッピング ID リストファイルから ファイルの内容を取得する これは、ユーザーがバッチ処理の途中でファイルの名前を変更した場合や、異なるサブフォルダに同じ表示名を持つファイルが2つあった場合でも、ループが動作し続けることを意味します。
なぜ base64ToBinary(...) の上 $content? Dropbox ファイルの内容を取得する ファイルをbase64文字列として返します。 $content プロパティ。PDF4me の「複数の PDF ファイルを結合」アクションは、base64 文字列ではなく、バイナリ バッファのコレクションを想定しています。 base64ToBinary(body('Get_file_content')?['$content']) これは、ファイルが配列に格納された瞬間に各ファイルを変換するブリッジです。
出力ファイル名を構築する理由 concat() そして 長さ()? ハードコーディング 出力.pdf つまり、実行するたびに前回のデータが上書きされるということです。 concat('merge-', string(length(body('List_files_in_folder'))), '.pdf') ファイル数を名前にスタンプするため、連続実行は merge-3.pdf、 merge-4.pdf、 merge-5.pdf補足:出力フォルダをざっと見れば、毎回いくつのファイルが対象になったかがわかります。
得られるもの
入力: Dropboxフォルダ /blog data/merge files dropbox そこにドロップしたPDFファイルをすべて格納できます。このチュートリアルでは、次の4つの例を使用します。 PDFA_Sample.pdf、 sample_3_page.pdf、 sample_pdf.pdf、 sample.pdf。 出力: 単一の統合PDF /blog data/merge blog template/output/ 名前 merge-N.pdf どこ N これは実行時のファイル数です。さらにファイルを追加すると、次回の実行時に自動的にそれらが認識されます。
ランニング前のDropboxフォルダ

実行後のDropboxフォルダ

2回目の実行ではフォルダ内に4つのファイルがあったので、出力は次のようになります。 merge-4.pdf以前のシリーズでは3つありました。
必要なもの
- パワーオートマタ。 Power Automateを開くプレミアムコネクタ付きのプラン(PDF4me Connectはプレミアムプランです)。
- PDF4me APIキー。 APIキーを取得してくださいPDF4meアクションを初めて追加する際に接続してください。
- Dropbox入力PDFのソースフォルダ、結合された出力の保存先フォルダを指定します。SharePoint、OneDrive、Google Driveは、それぞれのコネクタと全く同じように動作します。
- 数個のPDFファイルサイズや組み合わせは自由です。このチュートリアルでは、以下の4つのサンプルを使用します。 PDF_Sample.pdf、 sample_3_page.pdf、 sample_pdf.pdf、 sample.pdfそれらをドロップインして、すべてのスクリーンショットをミラーリングします。
まず、入力セットと期待される出力を取得します。 4つのサンプルをダウンロードして /blog データ/マージファイル ドロップボックス Dropbox に保存してから、フローを公開します。最初の実行では、 merge-4.pdf ここにリンクされているものと全く同じです。
フローの概要
- Dropbox: ファイルが作成されたとき (トリガー)。
- Dropbox: フォルダ内のファイル一覧を表示する監視対象フォルダ内の現在すべてのファイルを返します。
- 変数を初期化する 名前
Files(配列)。 - それぞれに適用する の上
body('List_files_in_folder'):- Dropbox: ファイルコンテンツを取得する による
Id。 - 配列変数に追加 と
base64ToBinary(body('Get_file_content')?['$content'])。
- Dropbox: ファイルコンテンツを取得する による
- PDF4me:複数のPDFファイルを1つのPDFファイルに結合する。
Filesで、Output.pdf外。 - Dropbox: ファイルの作成。 ファイル名
concat('merge-', string(length(body('List_files_in_folder'))), '.pdf')。
フローの概要全体

6つのアクション。各カードに適用すると「1/4」と表示されますが、これは実行時に監視対象フォルダに4つのPDFファイルが含まれていたためです。
ステップ1:Dropbox:ファイルが作成されたとき(トリガー)
これまでの流れ: トリガーのみ。
- で パワーオートマタ クリック 作成する、 選ぶ 自動化されたクラウドフロー。
- フローに名前を付けます(例:
Auto-Merge Dropbox Folder)、 選ぶ Dropbox: ファイルが作成されたとき トリガーとしてクリック 作成する。 - 接続する まだDropboxに登録していない場合は、登録してください。
- 設定する:
- フォルダ:
/blog data/merge files dropbox - 詳細パラメータデフォルト設定のままにします(1件中0件表示)。
- フォルダ:
トリガー設定

トリガーは監視対象フォルダをポーリングし、新しいファイルがアップロードされるたびに作動します。デフォルトのポーリング間隔はプランによって異なりますが、通常は1~5分です。
ステップ2:Dropbox:フォルダ内のファイル一覧を表示する
これまでの流れ: トリガープラス:フォルダ内のファイル一覧を表示します。
トリガーは新規ファイル1つで起動します。マージ処理には、フォルダ内の現在すべてのPDFファイルが必要です。 フォルダ内のファイル一覧 実行時にフォルダの内容の最新のスナップショットを取得します。
- クリック + 新しいステップ、 検索 Dropbox、 選ぶ フォルダ内のファイル一覧。
- 設定する:
- フォルダ:
/blog data/merge files dropbox(トリガーと同じ経路)
- フォルダ:
ファイル構成の一覧表示

- アクションが再開
body('List_files_in_folder')ファイルメタデータオブジェクトの配列。各オブジェクトはId、Name、DisplayName、Path、LastModified、 そしてSize次のステップでは、この配列を反復処理します。
ヒント。 フォルダーに混合コンテンツ(PDF、画像、Office ドキュメントなど)があり、PDF のみを結合したい場合は、 フィルタ配列 このステップの後に式を使用してアクションを実行します endsWith(toLower(item()?['Name']), '.pdf') そして、フィルタリングされた配列をループに渡す。
ステップ3:変数ファイルの初期化
これまでの流れ: トリガー、ファイル一覧表示、変数初期化。
マージ処理ではバイナリファイルのコレクションが必要です。それらを収集するための空の配列を割り当ててください。
- クリック + 新しいステップ、 選ぶ 変数を初期化する。
- 設定する:
- 名前:
Files - タイプ:
Array - 価値: 空欄のままにしてください
- 名前:
変数設定を初期化する

ステップ4:各項目に適用し、ファイルコンテンツを取得して配列に追加する
これまでの流れ: トリガー、ファイル一覧表示、変数初期化、各項目への適用。
これがフローの中核です。スナップショットが返したすべてのファイルをループし、そのバイトを取得し、バイナリに変換し、プッシュします。 Files。
ステップ4a:それぞれに適用する(ソースを選択)
- クリック + 新しいステップ、 選ぶ それぞれに適用する。
- 設定する:
- 前の手順から出力を選択します (表現):
body('List_files_in_folder')
- 前の手順から出力を選択します (表現):

ステップ4b:ファイルの内容を取得する(ループ内)
- ループの内側をクリック アクションを追加する、 選ぶ Dropbox: ファイルコンテンツを取得する。
- 設定する:
- ファイル: 選ぶ ID フォルダー内のファイル一覧から取得したトークン(動的コンテンツ)(現在のアイテムのIDに自動的に解決されます)。
- コンテンツタイプを推測する:
Yes(詳細設定項目内)

ステップ4c:配列変数に要素を追加する(ループ内)
- 以下、ファイルのコンテンツを取得します。 アクションを追加する、 選ぶ 配列変数に追加。
- 設定する:
- 名前:
Files - 価値 (表現、クリック)
fx):base64ToBinary(body('Get_file_content')?['$content'])
- 名前:

これが全てを結びつける唯一の線だ。 Dropboxは各ファイルを次のように返します { "$content": "<base64 string>", "$content-type": "application/pdf" }マージ処理にはバイナリバッファが必要です。 base64ToBinary(...) の上 $content 両者を橋渡しします。変換とマージアクションのエラー「無効なコンテンツ」をスキップします。
ステップ5:PDF4me:複数のPDFファイルを1つのPDFファイルに結合する
これまでの流れ: トリガー、ファイル一覧表示、変数初期化、各項目への適用、複数のPDFの結合。
配列全体が入力され、1つのPDFファイルが出力される。
- 「各ループに適用」の下にある + 新しいステップ、 検索 PDF4me、 選ぶ 複数のPDFファイルを1つのPDFファイルに結合する。
- 接続する PDF4meにAPIキーで接続します(初回のみ)。
- 設定する:
- 本文/ドキュメントコンテンツ: 選ぶ
Files変数トークン - 出力ファイル名:
Output.pdf
- 本文/ドキュメントコンテンツ: 選ぶ
マージアクションの設定

- PDFファイルは連結されています 配列の順序これはDropboxが返送した順序です(通常は名前のアルファベット順)。別の順序が必要な場合は、並べ替えてください。
body('List_files_in_folder')と共に 選択 ループ前のアクション、例えばLastModified新しい順で表示します。
ヒント。 内部 出力.pdf name は PDF のメタデータのタイトルであり、Dropbox のファイル名ではありません。実際の Dropbox 名は手順 6 で設定します。Power Automate の実行履歴でフローの実行を grep できるように、この名前を安定したプレースホルダーとして保持してください。
ステップ6:Dropbox:動的なファイル名でファイルを作成する
これまでの流れ: トリガー、ファイル一覧、変数の初期化、各項目への適用、複数の PDF の結合、ファイルの作成。
ファイル数を含んだ実行時計算によるファイル名で、結合されたPDFファイルをDropboxに書き戻します。
- クリック + 新しいステップ、 選ぶ Dropbox: ファイルの作成。
- 設定する:
- フォルダパス:
/blog data/merge blog template/output - ファイル名 (表現、クリック)
fx):concat('merge-', string(length(body('List_files_in_folder'))), '.pdf') - ファイルの内容: 選ぶ ファイルの内容 複数のPDFを結合するアクションからのトークン
- フォルダパス:
ファイル名式

最終行動準備完了

同じ表現は、 ヘッダー/ページ数 マージ出力では、統合されたPDFが何ページになるかを記録したい場合に便利です。
ヒント。 ファイル数ではなく日付で実行結果を記録したい場合は、式を次のように置き換えてください。 concat('merge-', utcNow('yyyy-MM-dd-HHmmss'), '.pdf')ファイルは次のように着陸します merge-2026-06-12-094501.pdf そして再放送は決して重ならない。
フローを実行して検証する
- 保存 右上の流れ。
- ファイルを(4つ)ドロップして
/blog data/merge files dropbox何でも構いません。ポーリング間隔によって、数分以内にトリガーが作動します。 - 開く 実行履歴 右上のボタンをクリックすると、アクションが緑色に変わります。「各項目に適用」をクリックすると、フォルダに4つのファイルがある場合は「1/4」のように、正しい反復回数が表示されます。
- Dropboxを開く
/blog data/merge blog template/output/. という名前のファイルmerge-4.pdf待機中です。開いてください。入力フォルダ内のすべてのPDFファイルが1つのドキュメントに結合されます。
実際に何を作ったのですか? 新規アップロードのたびに自動的に処理を行い、実行時にフォルダ全体の状態を読み取り、すべてのファイルを含む一意の名前のPDFファイルを作成する、ゼロタッチ統合パイプラインです。ハードコードされたリスト、スケジュールされたバッチジョブ、手動クリックは一切不要です。同じパターンで、4つのPDFファイルでも400個のPDFファイルでも、変更なしで処理できます。この同じレシピは、Make(Dropboxリストファイルのイテレータ)とZapier(ZapierによるFind Fileの結果のループ処理)の両方で動作します。
再構築せずに追加できる一般的なバリエーション
endsWith(toLower(item()?['Name']), '.pdf')ループは、.docx、.png、およびフォルダ内のその他のファイルをすべて無視します。sort(body('フォルダ内のファイル一覧'), '最終更新日'). 逆 逆行する(...) 統合されたPDFの先頭に最新の情報を表示したい場合。PDF/A-2bDropboxに保存される出力ファイルは、ISO 19005アーカイブ規格に準拠するようになりました。/処理済み次回の実行では、最新のアップロードのみが表示されます。トラブルシューティング
配列に追加 価値 式はラップされていません base64ToBinary(...)変換を行わないと、配列にはバイナリバッファではなくbase64文字列が格納され、PDF4meはそれを拒否します。配列に追加を再度開き、式エディタに切り替えて貼り付けます。 base64ToBinary(body('Get_file_content')?['$content']) 原文のまま。
トリガーは発火しましたが、List files は空の配列を返しました。トリガーと List files を確認してください。 フォルダ 値は同一です。パスの不一致(片方に末尾のスラッシュがあり、もう片方にない)がよくある原因です。
merge-.pdfの 長さ() 設計時に呼び出しが解決されませんでした。式を貼り付けたことを確認してください。 ファイル名 分野を通じて FX 式エディタで表示してください。プレーンテキストでは表示されません。プレーンテキストでは中括弧が文字として扱われ、関数が実行されません。
同じファイル数で2回連続して実行すると、同じ名前が生成されます(merge-4.pdf) 式をタイムスタンプに置き換える (concat('merge-', utcNow('yyyy-MM-dd-HHmmss'), '.pdf')) または GUID を追加 guid()。
次のステップ
同じ6ステップのパターン(監視、リスト化、配列へのループ処理、マージ、実行時名での保存)で、あらゆる「フォルダへの反応」自動化処理に対応できます。明日新しいファイルをドロップすれば、実行時に自動的に認識されます。編集も再デプロイも不要です。