SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

IEとExcelの連携 - ActiveXObjectを使ったIEとExcelの操作

Google検索の上位100位をスライド表示し、SEOツールとして活用してみる

IEとExcelの連携 - ActiveXObjectを使ったIEとExcelの操作 (3)

ダウンロード source.zip (7.5 KB)

まとめ(完成プログラム)

 完成したプログラムは次のとおりです。それぞれのソースコードを掲載しておきます。まず、このページでは、「google_get.hta」のソースコードを掲載します。

「google_get.hta」全文
<meta http-equiv="Content-type"
      content="text/html; charset=Shift_JIS">
<html>
<head>
<title>Googleの検索結果を保存</title>

<script language="JavaScript">
//<!--
    //==== ユーザー変数の初期化 ======================================
    //
    var xlPath = "google_save.xls";    // Excelファイルのファイル名
    var colNoMax = 10000;              // 縦列最大値

    var googleUrl =
        "http://www.google.com/search?&hl=ja&num=100&lr=lang_ja"
      + "&ie=shift-jis&oe=shift-jis&q=";

    //==== 共有変数の初期化 ==========================================
    //
    // XlWindowState - Excelのウィンドウ状態
    var xlNormal = -4143;
    var xlMaximized = -4137;
    var xlMinimized = -4140;

    // XlFileFormat - Excelのファイルフォーマット
    var xlWorkbookNormal = -4143;

//====================================================================
    //========================================
    //
    //    URLの取得
    //
    //========================================
    //    引数 :なし
    //    返り値:なし
    //    仕様 :IEでURLを開き、XLに保存する。

function GetUrl () {
    //==== 変数を初期化 ==============================================
    //
    var IE;        // IEオブジェクト

    var myPath;    // スクリプトのパス
    var fs;        // ファイルシステムオブジェクト
    var myFolder;  // フォルダ名

    var XL;        // Excelオブジェクト
    var book;      // Excelのワークブック
    var sheet;     // Excelのワークシート

    var colNo = 1;      // 縦列
    var rowNo = 1;      // 横列
    var cellStr = "";   // セルの文字列

    var i;         // カウンター用変数
    var aArry;     // 配列用変数
    var aArryLen;  // 配列数用変数

    var resStr = "";    // 結果表示用変数

    var nowDate;   // 時間用変数
    var year, mon, date, hour, min, sec;

    //==== IEを初期化 ================================================
    //
    // IEのオブジェクトを初期化
    IE = new ActiveXObject( "Internet Explorer.Application" );

    // IEのウィンドウの設定
    IE.Left = 100;
    IE.Top = 100;
    IE.Width = 320;
    IE.Height = 480;
    IE.Visible = true;

    // IEにURLを渡す
    IE.Navigate( googleUrl + f.q.value );

    //==== パスを初期化 ==============================================
    //
    // スクリプトのパスを取得
    myPath = unescape( location.href ).replace( "file:///", "" )
                                      .replace( /\//g, "\\" );

    // ファイルシステムオブジェクトを初期化
    fs = new ActiveXObject( "Scripting.FileSystemObject" );

    // フォルダ名の取得
    myFolder = fs.GetParentFolderName( myPath ) + "\\";

    //==== Excelを初期化 =============================================
    //
    // Excelのオブジェクトを初期化
    XL = new ActiveXObject( "Excel.Application" );

    // Excelのウィンドウの設定
    XL.Visible = true;
    XL.WindowState = xlNormal;
    XL.Left = 420;
    XL.Top = 100;
    XL.Width = 320;
    XL.Height = 480;

    // ファイルを開く
    book = XL.WorkBooks.Open( myFolder + xlPath );

    // 操作先シートを決定する
    sheet = book.worksheets(1);
    sheet.Activate;

    //==== Excelの入力位置を走査 =====================================
    //
    // 空行を探して、そこを入力開始位置にする
    //
    for ( colNo = 1; colNo < colNoMax; colNo ++ ) {
        // セルの文字列を取得
        cellStr = sheet.Cells( rowNo, colNo );

        // 空のセルを見つけたら抜ける
        if ( "" + cellStr == "undefined" ) {
            break;
        }
    }

    //==== Excelの wait 関数を使って待機処理 =========================
    //
    for ( i = 0; i < 100; i ++ ) {
        if ( IE.Busy ) {
            XL.wait(3);
        } else {
            break;
        }
    }

    //==== Excelのセルに、検索語と日時を書き込み =====================
    //
    nowDate = new Date();

    year = nowDate.getYear();
    if ( year < 2000 ) year += 1900;
    mon  = nowDate.getMonth() + 1;
    date = nowDate.getDate();
    hour = nowDate.getHours();
    min  = nowDate.getMinutes();
    sec  = nowDate.getSeconds();

    sheet.Cells( rowNo, colNo ) = f.q.value;
    sheet.Cells( rowNo, colNo + 1 ) = year + "/" + mon + "/" + date
        + " " + hour + ":" + min + ":" + sec;
    rowNo ++;

    //==== IEからURLを取得してExcelのセルに書き込み ==================
    //
    // Aタグの配列を取得する
    aArry = IE.Document.getElementsByTagName( "a" );
    aArryLen = aArry.length;

    for ( i = 0; i < aArryLen; i ++ ) {
        // 空のリンクは飛ばす
        if ( aArry[i].innerText == "" || aArry[i].href == "" ) continue;

        // 検索結果か確認
        if ( aArry[i].className != "l" ) continue;

        // Wikipediaなどの文字化け対策
        var urlStr = aArry[i].href;
        var chkStr0 = aArry[i].href;
        var chkStr1 = encodeURI( aArry[i].href );
        if ( chkStr0 != chkStr1 ) {
            urlStr = aArry[i].outerHTML.replace( /.*href="/, "" )
                                       .replace( /".*/, "" );
        }

        // Aタグ内の文字列とリンク先のURLをセルに代入
        sheet.Cells( rowNo, colNo ) = aArry[i].innerText;
        sheet.Cells( rowNo, colNo + 1 ) = urlStr;

        // 操作位置を1行下に移動する
        rowNo ++;
    }

    //==== Excelを保存 ===============================================
    //
    // ダイアログを無視して保存させる
    // 保存のファイル形式を変える場合は、xlWorkbookNormalを他の値にする
    //
    // ダイアログを表示させないようにする
    XL.DisplayAlerts = false;

    // 保存
    book.SaveAs( myFolder + xlPath, xlWorkbookNormal );

    // ダイアログを表示するようにする
    XL.DisplayAlerts = true;

    //==== IEとExcelを閉じる =========================================
    //
    IE.Quit();
    XL.Quit();

    //==== 結果の情報を表示 ==========================================
    //
    resStr += "取得したURLの数は " + ( rowNo - 2 ) + " 行です。\n\n";
    alert( resStr );
}

//====================================================================
//-->
</script>

</head>
<body onLoad="">

<form name="f">
検索したい言葉を入力して、ボタンを押してください。<br>
Googleでの検索結果のリストをExcelに保存します。<br>
<input type="txt" name="q" value="CodeZine" size=80><br>
<input type="button" value="Googleで検索" onClick="GetUrl()">
</form>

</body>
</html>

 次のページでは、スライドショーを行う「google_slide_show.hta」のソースコードを掲載します。

次のページ
おわりに

この記事は参考になりましたか?

IEとExcelの連携 - ActiveXObjectを使ったIEとExcelの操作連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1966 2008/01/23 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー