自分方位研究所

日々の活動記録

(Excel VBAでのIE制御) はてなブログ 「記事の管理」ページ の記事一覧をExcelシートに貼りつける。

はてなブログ 「記事の管理」ページから、1記事分をExcelシートに出力します。
出力結果はこのとおり。 Excelシートの出力範囲をコピーして、そのまま貼りつけています。これまた見苦しく申し訳ありません。

1 <tr class="tr-hover ">
2 <td class="td-entry-title">
3 <div class="entry-table-wrapper">
4 <div class="checkbox-table-cell">
5 <input name="entry" type="checkbox" value="12345678901234567">
6 </div>
7 <div class="entry-table-cell">
8 <div class="entry-table-entry-title">
9 <a class="entry-title js-search-entry-title" href="https://blog.hatena.ne.jp/hatenaID.hateblo.jp/edit?entry=12345678901234567">(Excel VBAでのIE制御) はてなブログ 「記事の管理」ページ の記事一覧。getElementsByTagNameメソッドを使って抜き出していきたいが・・・ </a>
10 </div>
11 <div class="entry-body ">
12 <div class="entry-body-summary js-search-entry-body">
13 はてなブログ 「記事の管理」ページのソースコードを調べて、どのタグを拾えば良いかがわかりましたので、次は、実際にExcel VBAを使ってコードを書いていきます。 いつものように、要点だけ記載したコードで、このままでは走らないので申し訳ありません。 Dim objTag_tr As Object '&lt;tr&gt; Dim objClas_tr_hover As Object Dim obj1Article As Object '1記事分のhtmlコード Do For Each objTag_tr In objIE.document.getElementsByTagName("tr") For Eac…
14 </div>
15 </div>
16 </div>
17 </div>
18 </td>
19 <td class="td-right td-admin-button">
20 <div class="entry-edit-buttons-row">
21 <div class="dropdown-window-wrapper js-entries-edit-dropdown">
22 <a class="btn dropdown-toggle" href="https://blog.hatena.ne.jp/hatenaID.hateblo.jp/edit?entry=12345678901234567">編集</a>
23 <div class="entries-edit-dropdown-window dropdown-window">
24 <ul class="list">
25 <li>
26 <a href="https://blog.hatena.ne.jp/hatenaID.hateblo.jp/edit?entry=12345678901234567">
27 <i class="blogicon-edit"></i> 編集
28 </a>
29 </li>
30 <li>
31 <a href="https://blog.hatena.ne.jp/hatenaID.hateblo.jp/revisions?entry=12345678901234567">
32 <i class="blogicon-recent"></i> 編集履歴を見る
33 </a>
34 </li>
35 <li>
36 <a href="https://blog.hatena.ne.jp/hatenaID.hateblo.jp/edit?copy_target_id=12345678901234567">
37 <i class="blogicon-entry"></i> コピーして新しい記事を書く
38 </a>
39 </li>
40 <li>
41 <button class="js-top-placed-activate-button" data-summary="はてなブログ 「記事の管理」ページのソースコードを調べて、どのタグを拾えば良いかがわかりましたので、次は、実際にExcel VBAを使ってコードを書いていきます。 いつものように、要点だけ記載したコードで、このままでは走らないので申し訳ありません。 Dim objTag_tr As Object '<tr> Dim objClas_tr_hover As Object Dim obj1Article As Object '1記事分のhtmlコード Do For Each objTag_tr In objIE.document.getElementsByTagName(&quot;tr&quot;) For Eac…" data-url="https://www.mypath-as-variant.com/entry/2020/06/12/231547" data-title="(Excel VBAでのIE制御) はてなブログ 「記事の管理」ページ の記事一覧。getElementsByTagNameメソッドを使って抜き出していきたいが・・・ " data-uuid="12345678901234567">
42 <i class="blogicon-pinned"></i> トップページの先頭に表示する
43 </button>
44 </li>
45 </ul>
46 </div>
47 </div>
48 </div>
49 </td>
50 <td class="td-blog-author">はてなID</td>
51 <td class="td-blog-category">
52 <span class="blog-category-name">Excel VBA</span>
53 <span class="blog-category-name">ブログ運営</span>
54 </td>
55 <td class="td-blog-comment">0</td>
56 <td class="td-blog-description">
57 <time class="time" datetime="2020-06-12T14:15:47.000Z" data-epoch="1591971347000" data-local="">2020年6月12日 23:15:47</time>
58 </td>
59 <td>
60 <a href="https://www.mypath-as-variant.com/entry/2020/06/12/231547" target="_blank"><i title="記事を見る" class="blogicon-external tipsy-southeast"></i></a>
61 </td>
62 </tr>

 

09行目:編集用ページURLと記事題名
13行目:記事本文先頭(サマリ)
50行目:作成者
52行目:カテゴリ
55行目:コメント数
57行目:投稿日時
60行目:公開用記事URL

今回使用したExcel VBAコードは以下のようになります。

Sub s06_02_OutputWorkSheet(obj1Article As Object)

'1記事分のhtmlコードをExcelワークシートに貼りつける

Dim outputSheet As Worksheet '= startBook.Worksheets("1記事出力")
Dim htmlArray As Variant
Dim tagText As Variant
Dim i As Integer

'outputSheet.Cells(i, 1) = obj1Article.outerHTML
'→これだとセルA1に、全文字が格納されてしまう。

'obj1Article.outerHTMLを改行で区切られた配列変数に変換する。
htmlArray = Split(obj1Article.outerHTML, vbLf)

i = 0
For Each tagText In htmlArray
    If Trim(tagText) <> "" Then
        i = i + 1
        outputSheet.Cells(i, 1) = i
        outputSheet.Cells(i, 2) =  Trim(tagText)
    End If
Next
End Sub

obj1Articleは、オブジェクトで、1記事分のhtmlが格納されています。
obj1Article.outerHTMLでソースコードが見れるのですが、これをそのままExcelシートに出力すると、1セルに全ソースコードが貼りついてしまいます。

そのため、obj1Article.outerHTMLを改行で区切られた配列変数に変換します。
htmlArray = Split(obj1Article.outerHTML, vbLf)

とすることで 配列変数htmlArrayに全文字を取り込んでいます。

あとは、配列変数に格納された文字列を、Excelシートに1セル1行ずつ出力していきます。

For Each で使用する変数を String型で宣言すると、コンパイルエラーが出ます。

For Eachは、コレクション オブジェクトまたは配列でのみ繰り返しを実行します。

というものです。
なので For Each内 で使用する変数はVariant型として宣言しました。

f:id:k-emu:20200613192034j:plain

また、出力する文字は  Trim(tagText) として空白を除去しています。
これにより文字の入っていない空白行は無視して、文字の入っている行だけを出力しています。

この次の工程では、このExcelシートから実際に必要な文字列を抜きだしていきます。

明日に続きます。