タグ別アーカイブ: PDF

エクセルのような表をアプリで簡単に作成してPDF化する方法~ガッツの日記第11回

【エクセルでシート別にわざわざ表を作成しなくても、簡単に表は作成できるんです!】

先日、PDFでデータを送付するため、わざわざエクセルのシート別にデータを管理している事例をみました

確かに、エクセルだと罫線が入った表をきれいに作成できるので仕方ない部分もあります

ただPDFファイルを作成するためだけにデータを一元管理しないのはデメリットも大きいです

今回はPower Appsにてデータを一元管理しつつ、PDFファイルを「エクセルで作成したように」作成する方法を解説します

具体的にやりたい事

元データは下の画像のエクセル表になります

こちらをPower Appsでフィルターしながら、Galleryに表示します

合計金額は別途ラベルで計算しておきます

そして上記の内容をPDFで別途出力します

ポイント

Print関数

Power Appsにて、新しい画面をクリックすると「縦長で印刷」を選択できます

実際に「縦長で印刷」の画面を選択すると、「Print関数」が仕込まれた画面が設定されます

上の画像の「印刷」をクリックすると、PDFで画面を保存することができる画面に切り替わります

しかも「印刷」ボタン自体はPDF画面に反映されません

何故ならVisibleプロパティに以下の内容が仕込まれてるからです

ですので、戻るボタンを作成する場合には、印刷ボタンをコピーしてOnSelectプロパティを変えるか、Visibleプロパティを変えましょう!

CONCAT関数&HTML

前述のPrint関数でPower AppsからPDFファイルを作成する方法は解説しました

では、エクセルのような表形式はどのように行うのか?気になるところだと思います

こちらは、通常ではデータテーブル機能を使用する方法が一般的だとは思います

ところが、Power Appsのデータテーブルだとあまり「表」らしくありません

ですので、HTMLで表を作成します

表の可変行の箇所は、CONCAT関数を使うのも大きなポイントです

今回は、Galleryの内容をCONCAT関数で抽出します!

データ抽出画面の作成

前述のPrint関数はPDFを作成する出力画面で使用します

それとはまた別の画面を作成し、出力画面で使用するデータを抽出できるようにします

こちらは「具体的にやりたい事」で前述した内容ですので、割愛させて頂きます

HTML

今回の内容はPrint関数で出力するのもポイントなのですが、HTMLで出力するところが最大のポイントとなります

特に行数が可変になるGalleryの内容をCONCAT関数を通じてHTMLで表現するところが難所です

基本構文

専門的な事は、専門サイトの方をご参照して頂きたいのですが、基本的な内容だけは紹介したいと思います

今回使用したHTMLをメモ帳で添付したので、そちらを修正して使いまわすことも十分可能だと思います

構文は大きく分けて3つに分かれます

1.普遍的なHTMLの内容の宣言、2.テーブルの構造の指定、3.見出し・行列の内容の指定

1.の普遍的な内容(”<!DOCTYPE html>~<body>)についてはここでは割愛させて頂きます

2.のテーブルの構造の指定については以下のように指定します

<table border=1 cellspacing=0 cellpadding=10 width=700 table style=font-size:15pt;>

「tablre border=1~cellspacing=0」で一般的な罫線を指定しています

そして、widthで表の幅、font-sizeでフォントサイズを指定しています

3.の見出し・行列の内容の指定については、見出しから解説します

 <tr>     

<th width=25%>日付</th>

<th width=25%>商品</th>

<th width=25%>客先</th>

<th width=25%>売上金額</th>

</tr>

<tr>で始まり、</tr>で終了するのですが、<th>~</th>内に各見出しを指定します

widthは列幅の指定になります

次に一番肝心の行列の指定です

こちらは前述のようにCONCAT関数で指定します

引数は2つになるのですが、第一引数はGalleryの内容になります

Gallery1.AllItemsを第一引数にすることで第二引数内で、ThisRecordによりGalleryの内容をHTML内に抽出することができます

次に、行列の内容ですが、こちらは見た目は小難しそうですが、<tr>と<td>の出現位置に注目して頂くとかなりシンプルなのがお分かりいただけると思います

まず、<tr>で1行目が始まり、各列が<td>で始まります

ここで、ルールが1つあるのですが、</~>で終了します

繰り返しになりますが、<tr>と<td>の出現位置に注目すれば、かなりシンプルに行列が表現できます

それでは、

ここまでで基本的な内容が指定できたと思います

ここから応用ですが、空白行を追加します

空白行は「”&nbsp;”」で表現します

“<tr><td>” & “&nbsp;” & “</td><td>” & “&nbsp;” & “</td><td>” & “&nbsp;”& “</td><td>” & “&nbsp;”

更に合計行は「”&nbsp;”」を交えながら表現します

 & “</td><td>” & “&nbsp;” & “</td><td>” & “&nbsp;”& “</td><td align=right>” & Label_合計.Text &  “</table>

これで、表を更にエクセルライクにすることができました

注意点

注意点は2つあります

1つは、HTMLはラベル内に記述するのではない点です

記述は下の画像のHTMLテキスト内で行います

次に注意点の2点目です

記述するHTMLはあくまで文字列で指定します

ですので、”ではじまり”で終わります

途中でも「文字列」が成立するように”の位置と&の位置には注意する必要があります

上記の内容に注意すれば、エクセルライクな表をPDFファイル内に設定できるようになります

画像に alt 属性が指定されていません。ファイル名: image-11.png

<まとめ>

今回は、Power Appsにてエクセルのような表をPDFファイルで出力する方法について解説しました

今回の紹介した仕組みを有効活用すれば、エクセルの過度なシート別の使用も減らすことができます

尚、

今回はHTMLについては簡単な内容だけ紹介しました

ぜひ、専門的なサイトの内容も参考にして頂きたいと存じます

個人的には「SAMURAI ENGINEER BLOG」様を参考にさせて頂きました

https://www.sejuku.net/blog/49377

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村
にほんブログ村 IT技術ブログ VBAへ

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関数をうまく組み合わせれば、意外と簡単に行えます

今回は、抽出データの下にあるデータはフィルタしただけで済みましたが、実際には複雑なパターンもあるかもしれません

その際は過去記事で紹介した「インデックス列と余り、減算の算出」の組み合わせが有効かもしれません

あわせて覚えておいていただけると幸いです

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

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ファイルを指定

2.読込む対象データを指定

3.ダウンロード

4.「PDFから」のボタンが無い場合

<まとめ>

1.PDFファイルを指定

データタブの「データ取得」から「ファイルから」⇒「PDFから」を指定します

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

取得するファイルを指定すると、2.で解説する「ナビゲーター画面」が開きます

(注)もし、「PDFから」のボタンが無い場合

        ➡4.「PDFから」のボタンが無い場合

2.読込む対象データを指定

PDFのデータをPower Queryで取得する場合には、2つの方法を選択できます

・PDFのページ全部を取得する

・ページ内のテーブルデータ(表データ)を取得する

上の2つの方法の選択は、取得するファイルを指定した後に開く、この「ナビゲーター画面」で行います

ナビゲーター画面では、ページ単位やテーブルデータ単位にて、取得するものを取捨選択することもできます

ナビゲーター画面では、左側にリストで表示される各Table(テーブルデータ)、もしくは各ページの内容を、下のGIFのように確認することができます

実際に取得する内容を決めたら、ナビゲーター画面の左上「複数のアイテムの選択」にチェックを入れた上で、取得対象にもチェックを入れます

今回の解説では、下の画像のように3つのTable(表データ)にチェックを入れます

3.ダウンロード

取得対象データをナビゲーター画面で3つ指定しましたので、今度はダウンロード先を指定します

ナビゲーター画面下の「読み込みボタン」の横にある▼ボタンをクリックし、クリック後に表示された「読み込み先」のテキストをクリックします

「読み込み先」のテキストをクリックした後は実際の読込先、つまりダウンロード先を指定する画面が開きます

この解説では、読込先を指定する画面にて「テーブル」「新規ワークシート」の2つを指定します

この読込先の指定については、詳細な内容を解説した記事がありますので、そちらを参照してください

読込先として既存シートに読込を行ったり、ピボットテーブルで出力することも可能です

ここまで行えば、PDF内にあった3つの表データが下のGIFのように、3つのエクセルシートに分かれてダウンロードされています

ちなみに画面右に「クエリ」というものが3つできていますが、これはスマホ内のブックマークのようなものだと思ってください

4.「PDFから」のボタンが無い場合

バージョンによっては「PDFから」のボタンが出てきません

続きを読む Power Queryって何8???~PDFファイルをエクセルに変換~