タグ別アーカイブ: PDF
PDF変換の応用~フォルダに入れた複数PDFから都合良くデータを切り取る方法
今回はフォルダに入れた複数PDFファイルから、一部の箇所だけデータを一括で取得します
扱うPDFファイルには、以下の画像のように振込先のデータが含まれています

このPDFファイルから振込先のデータだけを取得します
しかもPDFファイルは複数あり、行数が可変になっています

この処理のポイントは大きく分けて2つあります
ポイント
サンプルファイルの変換
今回の処理で主に作業するのは「サンプルファイルの変換クエリ」になります

複数ファイルの1つを変換するクエリを修正して、複数ファイル全てに変換ルールを適用します
M関数の組み合わせ
過去の記事で、見出し位置が不規則な複数ファイルからデータを取得する方法を解説しました

この際、上の画像の見出しをキーにしてList.PositionOf関数とTable.RemoveFirstN関数の組み合わせ「見出しの上の行」を削除しました
今回も同じようにList.PositionOf関数とTable.RemoveFirstN関数の組み合わせを使用します
・List.PositionOf関数 ➡ 指定文字列のList内の位置を取得
・Table.RemoveFirstN関数 ➡ テーブルから指定行の上の行を削除
フォルダから一括取得
まずは複数PDFファイルが格納されたフォルダからデータを一括取得します

「Fileの結合」画面ではテーブルではなく全ページを指定します

キーの設定
エディタで「サンプルファイルの変換クエリ」を開くと次の画像のようになっています

上の画像の黄色く印をした箇所の「お振込先・・・」以降の行から「備考」の上の行までが今回の取得対象です
「お振込先」の文字列をキーに設定した上で以降の作業を進めます
キーの抽出
キーとなる文字列「お振込先」の4文字を、列の追加タブ内の「抽出」メニューを使用して切り取ります

すると下の画像のように「お振込先」の文字列が抽出した列ができます

この「お振込先」の文字列より上の行を次から削除します
その前にステップ名は分かり易く変更しておきましょう➡Data2
キーの上の行の削除
ここからM関数を使用します
まずカスタム列作成画面にて、List.PositionOf関数を入力して「お振込先」の文字列がある行を特定します

すると10という数字が入った列ができます

「お振込先」の文字列は11行目ですが、M言語は0からはじまるので正しく設定できています
ここからTable.RemoveFirstN関数で上の行を削除します(-1などの調整は必要ありません)

上の画像の数式を文字列にすると次の通りとなります
Table.RemoveFirstN(Data2,List.PositionOf(Data2[最初の文字],”お振込先”))
この数式を作る際には、ステップ名をテーブル名に使用するのもポイントとなります
下の画像が新たに作成されたテーブルになります

テーブルが複数ありますが、必要なのは一つだけですので「行の保持」で余分なテーブルは削除します

テーブル展開
ここから作成したテーブルの展開処理を行います
まずはテーブル以外の列を削除します

この後、必要な列だけ展開します

この時点で大分、形になってきました

なお、この時点で最終アウトプットを行うクエリでエラーが発生しています

これはサンプルファイルの変換クエリで元ある列を削除しているからです
このエラーは各列の型式を変更する最終ステップを削除すれば消えます

では、変換クエリに戻ります
ここからは最終調整です
最終調整

上の画像のように、空欄や「備考」などの文字をフィルターで取り除きます

この状態から行列を入れ替えます

ここからは列名を整えるのですが、お振込先の文字は「列の分割」メニューで切り取っておきましょう

では、最終アウトプットのクエリを見てみましょう

うまくデータが複数作成できています
<まとめ>
今回は複数PDFファイルのデータから、キーのデータより上にある行を削除して必要な箇所だけ抽出しました
M関数のList.PositionOf関数とTable.RemoveFirstN関数をうまく組み合わせれば、意外と簡単に行えます
今回は、抽出データの下にあるデータはフィルタしただけで済みましたが、実際には複雑なパターンもあるかもしれません
その際は過去記事で紹介した「インデックス列と余り、減算の算出」の組み合わせが有効かもしれません

あわせて覚えておいていただけると幸いです
POWER AUTOMATE DESKTOP逆引き辞典~PDF操作~
Microsoft社の無料RPA・Power Automate Desktopのアクションの中から、PDF操作のアクションを紹介します
➡逆引き辞典に戻る

PDFファイルから1ページの抽出
アクション名:新しいPDFファイルへのPDFファイルページの抽出
下のGIF画像では3ページが詰まっているPDFファイルから、2ページ目を抽出しています

*➡参考ページ
パラメーターの選択

PDFファイル
抽出するPDFファイルを設定します
ページ選択
抽出するページを設定します
抽出されたPDFファイルのパス
抽出した後のファイルを出力します
ファイルが存在する場合
3種類の方法を選択できます(1.上書き、2.上書きしない、3.連番を付ける)
サンプル
ファイルなどの設定が必要です
複数ファイルを1ファイルに統合
アクション名:PDFファイルを統合
複数PDFファイルを1PDFファイルに統合します
このアクションを行う場合には、事前に下の画像のように「フォルダー内のファイルを取得」アクションにて複数ファイル名を取得して変数/Filesに格納しておきます

パラメーターの選択

PDFファイル
PDFファイルを指定した変数を設定します
統合されたPDFのパス
作成したPDFファイル名を設定します
ファイルが存在する場合
既にファイルがある場合には「上書き」「上書きしない」「連番を付ける」を設定できます
サンプル
フォルダなどの設定が必要です
RPAで複数PDFファイル➡1PDFファイル、1PDFファイル➡複数ファイル
RPAには底知れない「便利機能」があります
今回はエクセルVBAで作成したらかなり複雑になりそうな作業を、RPAの画面内で数回のクリックで行えるようにする方法を解説します
具体的にRPAで行う作業は次の内容です
・フォルダにある複数のPDFファイルを1つのPDFファイルに結合
・1つのPDFファイルを複数のPDFファイルに分解
使うRPAは無料でインストールできる「Power Automate Desktop」になります
複数PDF➡1PDFファイル
下の画像にあるように、1つのフォルダに3つのPDFファイルが格納されています

それぞれのPDFファイルの中味は、数字の番号になっています

これらの複数のPDFファイルを2つのアクションで結合します
ファイル名の取得
取得するファイルが格納されているフォルダ名を、こちらのアクションで指定します

複数ファイルの結合
結合先のファイル名などをこちらのアクションで指定します

ファイル名には、必ず拡張子「.pdf」を指定するのがポイントです
*結合先のPDFを事前に作成しておく必要はありません
実際のRPAシナリオの動き
2つのアクションからなるシナリオを実際に動かすと次のように動きます
*次のGIF画像はデバックモードで動いています(1つ1つのアクション内容を確認して動かす)

まず、1つ目のアクションでフォルダ内に格納されているPDFファイルのファイル名を取得します
その後の2つ目のアクションで予め指定されたPDFファイルに、取得したファイルの内容を結合します
下のGIF画像は結合したPDFファイルを開いた時の内容です

1PDFファイル➡複数PDFファイル
こちらは2パターン紹介します
1つ目は1PDFファイルのページ数が決まっているパターン
2つ目はページ数が分からない時のパターンです
ページ数が事前に分からない時には、超えようがないページ数を指定します
ページ数が決まっているパターン
こちらはページ数+1のアクション数でシナリオを作成できます
今回は、上記のRPAシナリオで結合したPDFファイルを使用します
こちらはPDF内に3ページがあるのが事前に分かっています

ここから設定するアクションの話しです
フォルダに格納されているファイル名を取得するのは、上記のRPAシナリオと一緒です

次に「新しいPDFファイルへのPDFファイルページの抽出」アクションにて「元ファイル名」「ページの選択」「出力ファイル名」の3つを指定します

上記の画像はページ選択と出力ファイル名を1で指定していますが、同じものを後2ページ分作成します
上記のRPAシナリオを動かすと次のようになります

ページ数が事前に分からない場合のパターン
この場合は、繰返し処理を使います
下の図のように繰返し処理をするアクション内で、終了値を100というあり得ない数字で設定しておきます

そして、Loop内に先ほど設定したアクションを今回は1つだけ配置します

こちらの「新しいPDFファイルへのPDFファイルページの抽出」内には変数を設定します

上の画像で黄色く印を付けた「%LoopIndex%」は繰返し処理内で動くカウンター変数です
こちらのカウンター変数は自動で繰り上がっていきますので、こちらを活用します
但し、上記のままだとエラーが途中で発生しますので、エラー対策を組み入れておきます
あまり望ましくはないですが、エラー対策を入れなくても動くことは動きます

<まとめ>
今回はMicrosoft社の無料RPAである「Power Automate Desktop」を使用して「PDFを結合・分解」するところを紹介しました
もちろんエクセルVBAなどでも同じ事はできますが、開発や修正を考えると段違いにRPAを使用した方が早いですね
これはもう、知っているか知っていないかで差が段違いにつく世界だと思います
業務削減の必要性を感じている人はぜひ、RPAを研究して見るといいと思います
Power Queryって何8???~PDFファイルをエクセルに変換~
こんにちは、Excellent仕事術のガッツ鶴岡です
この記事は、Power Queryというエクセルのスゴイ新機能をまだ知らない人向けに書いている記事です
「エクセルで大量のデータを扱っているけど、何とか作業を効率化したい」
「エクセルをぜひ得意分野にしたい」
という方はぜひページの最後までお付き合いください
ところで、読者の皆さんは、スマホを初めて操作した時にどんな印象をもちましたでしょうか?
「ネットでレストランを見つけてそのまま予約電話ができる!!」
「直観的で操作が分かり易い」
筆者はPower Queryを登場した時には同じぐらい、いや、それ以上の衝撃を受けました
今回は筆者が衝撃を受けたPower Queryの機能の一つ、PDFファイル内のデータをエクセルファイルにダウンロードする方法を、簡単に紹介していきたいと思います
ちなみに今回、紹介する内容は、今までPower Queryを使ったことが無い人でも取り組める内容になっています
本題に入る前に、サンプルで使用するPDFの中味について紹介させてください

サンプルのPDFファイルは2ページに分かれており、以下のように2ページ内に3つの表があります
・1ページ目⇒2つの表データ
・2ページ目⇒1つの表データ
今回の解説では、PDFファイルのデータをまるごとエクセルシートにダウンロード(読込)するのではなく、ファイル内の3つの表をそれぞれ3つのエクセルシートにダウンロードします!
それでは、本格的な操作について解説を始めます
解説に使用するPDFファイルはぜひ、事前にダウンロードしておいてください
目次
1.PDFファイルを指定
データタブの「データ取得」から「ファイルから」⇒「PDFから」を指定します

次にファイル自体を指定します

取得するファイルを指定すると、2.で解説する「ナビゲーター画面」が開きます
(注)もし、「PDFから」のボタンが無い場合
2.読込む対象データを指定
PDFのデータをPower Queryで取得する場合には、2つの方法を選択できます
・PDFのページ全部を取得する
・ページ内のテーブルデータ(表データ)を取得する
上の2つの方法の選択は、取得するファイルを指定した後に開く、この「ナビゲーター画面」で行います
ナビゲーター画面では、ページ単位やテーブルデータ単位にて、取得するものを取捨選択することもできます
ナビゲーター画面では、左側にリストで表示される各Table(テーブルデータ)、もしくは各ページの内容を、下のGIFのように確認することができます

実際に取得する内容を決めたら、ナビゲーター画面の左上「複数のアイテムの選択」にチェックを入れた上で、取得対象にもチェックを入れます
今回の解説では、下の画像のように3つのTable(表データ)にチェックを入れます

3.ダウンロード
取得対象データをナビゲーター画面で3つ指定しましたので、今度はダウンロード先を指定します
ナビゲーター画面下の「読み込みボタン」の横にある▼ボタンをクリックし、クリック後に表示された「読み込み先」のテキストをクリックします

「読み込み先」のテキストをクリックした後は実際の読込先、つまりダウンロード先を指定する画面が開きます
この解説では、読込先を指定する画面にて「テーブル」「新規ワークシート」の2つを指定します

この読込先の指定については、詳細な内容を解説した記事がありますので、そちらを参照してください
読込先として既存シートに読込を行ったり、ピボットテーブルで出力することも可能です
ここまで行えば、PDF内にあった3つの表データが下のGIFのように、3つのエクセルシートに分かれてダウンロードされています

ちなみに画面右に「クエリ」というものが3つできていますが、これはスマホ内のブックマークのようなものだと思ってください
4.「PDFから」のボタンが無い場合
バージョンによっては「PDFから」のボタンが出てきません