Web上の複数ページを自動巡回してPDFへ出力

1.概要

Web上のページを仮想プリンタへ出力する場合は、ブラウザの印刷出力でPDF出力できます。また、ブラウザの拡張機能でプラグインを インストールしてアイコンをクリックするだけでPDF出力することもできますが、複数ページを連続してまとめて自動出力できれば 便利だと思います。筆者の場合は、個人の学習目的としてExcelやPython等のプログラミング講座やサンプルを掲載 しているサイト様から情報収集しています。少しでも個人レベルで時間や労力の削減を目的として効率化を図っています。 今回は、Excel VBAで自作したWeb上の複数ページを自動巡回してPDFへ出力する方法について紹介します。


2.作業手順

まずは、情報収集のための準備作業です。検索エンジンでググったりして自分が必要とすべき情報があるサイトを見付けに行きます。 これは普段から誰でもやっていることですね。この作業がネットにおいては何よりも重要な作業だと思います。 目的とするページが見つかったら、サイトのURLをメモ帳などにメモっておきます。 以降は、Excelのマクロを実行しての作業となります。少しだけ面倒なのですが、2種類のVBAマクロを利用します。

(1)指定URLのリンク取得.xlsmを起動して該当先(Webページ)のリンク一覧を取得します。
    リンクの取得が完了したら、指定URLのリンク取得.xlsmを閉じます。

指定URLのリンク取得.xlsmの起動画面

(2)リンク取得が完了したら、日付時刻形式のブックファイルとして出力されるので開いて確認します。 PDF出力しない不要な行の削除とタイトル項目名(PDF出力する時のファイル名)を必要であれば変更します。

リンク取得後の出力済みファイルの不要行の削除とファイル名の調整

(3)項目名の先頭に番号(連番)が付加されているがなければ連番を付加しておくと良いです。 事前に手間でも、この作業をしておくとファイル出力後、番号順にファイルが並ぶので管理し易いです。ファイルは閉じずに上書き保存してこの状態にしておきます。

項目名の先頭に番号(連番)を付与

以上が準備作業です。ここからの作業は、上記で取得編集したリンクファイルを利用しての
WebページのPDF出力です。

(4)Webページを仮想プリンターへ出力(prttopdf.xlsm)を起動して、(3)で編集したファイルを行選択してコピーし、prttopdf.xlsm画面の3行目から 貼付けます。

Webページを仮想プリンターへ出力(prttopdf.xlsm)を起動

(5)PDF出力開始ボタンをクリックして取得・出力を開始致します。一度に多くのファイルを処理すれば時間も掛かりますので最大でも 20件程度として分割して取得・出力させることを推奨します。

自動巡回してWebページ自動取得開始

(6)PDFファイルへの出力先は、VBAマクロを起動したカレントディレクトリに格納されますので、管理しやすいように新規フォルダを作成して 出力されたファイルは移動させて下さい。

取得されたPDFファイルの確認・管理
3.ダウンロード

上記で紹介した指定URLのリンク取得.xlsmとWebページを仮想プリンターへ出力(prttopdf.xlsm)の2種類のVBAマクロファイルを提供します。 改造や配布等も自由に行って頂いてかまいません。
本マクロは、Microsoft 365(Excel2016)で作成し動作確認しています。動作確認未検証ですが、Excel2007以降であれば動作すると思います。
ただし、動作する前にマクロを起動して、32bit版Excelを利用の場合は、ALT+F11キーでVBE(エディタ)を開いて下記のPtrSafe部分を確認後、修正して下さい。
Option Explicit

'***** 【重要】32bit版を利用の場合は、API宣言部の PtrSafe を削除して下さい。

' Sleep API宣言
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
' keybd_event API宣言
Public Declare PtrSafe Sub keybd_event Lib "user32" ( _
       ByVal bVk As Byte, _
       ByVal bScan As Byte, _
       ByVal dwFlags As Long, _
       ByVal dwExtraInfo As Long)

ページの読み込み時間などの関係で処理が失敗する場合があります。下記部分のsleep時間を調整して下さい。 また、取得したページのURLで同一ページ内で#でジャンプさせている場合は取得できません。 取得したURLリストの前後を確認して、URLの末尾の#以降を削除するか、URLそのものを削除して下さい。
(例)https://sample.page.com/index.html#jamp  →  この例のような形式のURLを削除する。
       ' 1Sec Wait
       Sleep (2000)
       '***** 印刷開始(ダイアログ表示) *****
       objIE.ExecWB 6, 1

       ' 2Sec Wait
       Sleep (2000)
       '***** [Enter]キー送信 *****
       SendKeys "{Enter}"

       '***** 3Sec以上確保必要 (5Secに設定) *****
       Sleep (5000)

ダウンロード

■関連記事
・通常のプリンタをバッチで切り切替える

コメント

このブログの人気の投稿

Excelアドインで日本語形態素解析

階層構造JSONファイルの作成

HSPでコマンドプロンプトを制御する

TOP