SHOEISHA iD

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

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

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

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

Webページに含まれるURLを抽出し、Excelにまとめて保存する

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

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

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

 完成したプログラムは次のとおりです。シンプルな内容ですが、実用的なアプリケーションになっています。

「WebページのURLを、Excelにまとめて保存」全文
<meta http-equiv="Content-type"
      content="text/html; charset=Shift_JIS">
<html>
<head>
<title>WebページのURLを、Excelに保存</title>

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

    //==== 共有変数の初期化 ==========================================
    //
    // 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 = "";   // 結果表示用変数

    //==== 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( f.url.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 ( rowNo = 1; rowNo < rowNoMax; rowNo ++ ) {
        // セルの文字列を取得
        cellStr = sheet.Cells( rowNo, colNo );

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

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

    //==== 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;

        // 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の数は " + aArryLen + " 個でした。\n\n";
    resStr += "現在のExcelの行数は " + ( rowNo - 1 ) + " 行です。\n\n";
    alert( resStr );
}

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

</head>
<body onLoad="">

<form name="f">
URLを入力して、ボタンを押してください。<br>
入力したURLのWebページ内のURLをExcelに保存します。<br>
<input type="txt" name="url" value="http://www.google.com/" size=80><br>
<input type="button" value="Webページ内のURLをExcelに保存"
       onClick="GetUrl()">
</form>

</body>
</html>

 以下、作成したアプリケーションの簡単な操作マニュアルを書いておきます。

  1. Explorer上で「ie2excel.hta」をダブルクリックして、ウィンドウを起動する。
  2. 入力欄にURLを入力する。
  3. ボタンを押すと、自動的にそのURLを開いて、Webページ内のURLをExcelに保存する。
  4. 取得したURLは、「save.xls」の末尾に追加されていく。
  5. 終了する際は、ウィンドウ右上の[×]ボタンをクリックしてアプリケーションを終了する。

 エラー回避処理はあまり行っていないので、本格的に利用する際は、各処理にエラー時の処理を追加するとよいでしょう。

おわりに

 IEやExcelは、日常的によく使うアプリケーションです。そのため、プログラムで操作を自動化すると非常に便利です。特にWebでの調べ物などで、2つのアプリケーションを起動して作業をする際には威力を発揮します。そういった際に、今回のようなプログラムを書けばよいことを知っていると大変作業がはかどります。アイデア次第でさまざまな活用ができますので応用してください。

 次回は、今回のプログラムを応用して、簡単で便利なツールを作ってみようと思います。それでは次回をお楽しみに。

参考資料

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
IEとExcelの連携 - ActiveXObjectを使ったIEとExcelの操作連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー