まとめ(完成プログラム)
完成したプログラムは次のとおりです。シンプルな内容ですが、実用的なアプリケーションになっています。
<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>
以下、作成したアプリケーションの簡単な操作マニュアルを書いておきます。
- Explorer上で「ie2excel.hta」をダブルクリックして、ウィンドウを起動する。
- 入力欄にURLを入力する。
- ボタンを押すと、自動的にそのURLを開いて、Webページ内のURLをExcelに保存する。
- 取得したURLは、「save.xls」の末尾に追加されていく。
- 終了する際は、ウィンドウ右上の[×]ボタンをクリックしてアプリケーションを終了する。
エラー回避処理はあまり行っていないので、本格的に利用する際は、各処理にエラー時の処理を追加するとよいでしょう。
おわりに
IEやExcelは、日常的によく使うアプリケーションです。そのため、プログラムで操作を自動化すると非常に便利です。特にWebでの調べ物などで、2つのアプリケーションを起動して作業をする際には威力を発揮します。そういった際に、今回のようなプログラムを書けばよいことを知っていると大変作業がはかどります。アイデア次第でさまざまな活用ができますので応用してください。
次回は、今回のプログラムを応用して、簡単で便利なツールを作ってみようと思います。それでは次回をお楽しみに。
