VBAプログラム開発、スクレイピング・詳細データ取得拡張【1-3】ISBNコード複数件をWebの書籍情報へ登録する
書籍情報の1件登録及び複数件削除まで作成できました。
今回は複数の書籍をまとめて登録できるようにします。
今回の目的
複数の書籍を一度のアクションでまとめて登録できるようにする
なぜやるか
復習書籍登録フォームがWeb上で作成されているので、利用して簡単にまとめて登録できるようにするため
やりたいこと
- 登録する書籍のISBNコードをワークシートから読み取る
- 複数書籍登録用に加工する
- Web操作で登録処理を実施する
やったこと
- 作成手法を考える
- 登録するISBNコード入力欄を用意する
- 入力されたISBNコードを認識させる
- カンマ区切りテキストを生成する
- フォームに反映してWeb上で書籍登録させる
実施内容
ISBNコード登録を複数件登録へ拡張する
書籍登録に関してはWeb側では複数の登録フォームを作成していました。
- 個別にタイトル等を入力するページ
- ISBNコード1件のみ指定するページ
- ISBNコード20件までをまとめて登録するページ
今回はまとめて登録するページを利用する形で書籍登録できるようにしていきます。
どうやってVBAコードを作成するか
PHPプログラム作成時に複数のISBNコードをまとめて登録するフォームを作成していました。今回はこのフォームを利用できるようにVBAコードを作成していきます。
フォームは以下のような物でした。
カンマ区切りによって20件までISBNコードをまとめて一度に登録出来るようにしていました。上限を設けているは、大量登録を防止するためのものです、大量件数用の処理は特別な物をもうけていない為、件数制限を設けていました。
ここにワークシート上で指定したISBNコードをまとめてフォーム入力して登録できるようにしていきます。
フォームに引き渡すISBNコードを生成する
書籍登録するISBNを複数指定できるようにワークシートに入力欄を作成しました。
複数登録フォームの上限が20件となっているので、20件分の入力欄を準備しました。入力されているISBNコードは前回削除した書籍の情報です。今回改めて追加します。
ワークシート上のデータをカンマ区切りテキストにする
セル毎にISBNコードを入力した後は、この情報を順番に処理して、カンマ区切り形式のテキストにしていきます。
1件のISBNコード登録のVBAをベースに作成しました。
# ISBN複数登録用プロシージャ(主な作成点)
Dim InputISBN As Collection
Set InputISBN = New Collection
'ISBNコード取得
i = 1
Do Until ISSheet.Cells(i, 2).Value = ""
InputISBN.Add ISSheet.Cells(i, 2).Value
i = i + 1
Loop
'カンマ区切りテキスト生成
Dim EntryISBN As String
i = 1
Do
EntryISBN = EntryISBN & InputISBN(i)
If i <> InputISBN.Count Then EntryISBN = EntryISBN & ","
i = i + 1
Loop Until i > InputISBN.Count Or i > 20
まずISBNコードをワークシートから読み取ります。
読み取ったコードはInputISBNコレクションを利用して格納します。
次にコレクション化したISBNコードをカンマ区切り形式としてEntryISBN変数に格納します。
If i <> InputISBN.Count Then EntryISBN = EntryISBN & ","
この記述によって、iとcountが同じ値…つまりは最後のデータでなければカンマを追加しています。これは一番最後にカンマをつけないための対処です。
ここでVBA上の変数が想定通りに取得できていることを確認します。
InputISBNコレクションです。要素ごとにISBNコードが取得できています。
EntryISBNについても、ウィンドウでは表示が長くなってしまいますが、
"9784862554963,9784065020050,9784862553737,9784798057767,9784471142124,9784295000914"
と、連結したデータが取得できていることを確認しました。
フォームにカンマ区切りテキストを入力する
ここまでくれば、あとはフォームに値を反映させて、登録ボタンを押せば完了です。
この処理は前回までに実施しています、同じように作成していきます。
# 登録フォームHTML
<form action="/book/isbn_some" method="post">
<div class="form-contents">
<div class="form-input form-one-size">
<div class="form-label">
ISBNコード[20件まで](カンマ区切り、改行で連続投入可能)
</div>
<div>
<textarea name="isbns" class="form-input__detail" type="numbers"></textarea>
</div>
</div>
</div>
<div class="form-foot">
<input class="send isbn" type="submit" value="登録">
</div>
</form>
テキスト入力欄と登録ボタンの要素を確認しておき、対応したアクションを指定します。
# ISBN複数登録用プロシージャ
'フォーム入力
htmlDoc.getElementsByClassName("form-input__detail")(0).Value = EntryISBN
htmlDoc.getElementsByClassName("send isbn")(0).Click
これでISBNコードのカンマ区切りデータと、入力フォーム操作の準備が完了しました。
登録できることを確認します。
Excelから取得したISBNコードを読み取り、書籍登録が実施できました。
これで、フォーム上限の20件までを一度に登録することができるようになりました。
しかし、登録できるものの結果表示はWeb側に表示されるのみです。
今後は結果についても何かしらExcel上で確認できるようにしていきたいところです。