以下、「google_slide_show.hta」のソースコードになります。
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <html> <head> <title>Googleの検索結果を、IEでスライドショー表示</title> <script language="JavaScript"> //<!-- //==== ユーザー変数の初期化 ====================================== // var xlPath = "google_save.xls"; // Excelファイルのファイル名 var csvPath = "google_save.csv"; // CSVファイルのファイル名 // 自身のウィンドウ var thisWinX = 100; // X位置 var thisWinY = 100; // Y位置 var thisWinW = 640; // 横幅 var thisWinH = 120; // 高さ // 表示用ウィンドウ var viewWinX = thisWinX; // X位置 var viewWinY = thisWinY + thisWinH; // Y位置 var viewWinW = thisWinW; // 横幅 var viewWinH = 480; // 高さ //==== 共有変数の初期化 ========================================== // // XlWindowState - Excelのウィンドウ状態 var xlNormal = -4143; var xlMaximized = -4137; var xlMinimized = -4140; // XlFileFormat - Excelのファイルフォーマット var xlCSV = 6; var IE; // IEオブジェクト var fs; // ファイルシステムオブジェクト var csvArry; // CSV配列 // データの値 datName = 0; datUrl = 1; datMax = 2; // 待機処理用変数 var Timeout = 10 * 1000; // 最大タイムアウト時間(10秒) var WaitTime = 500; // 待機時間 var WaitCnt = 0; // 待機カウント var chkFunc; // 待機処理確認用関数 var encFunc; // 待機処理終了時実行用関数 // スライドショー用変数 var nowViewNo = 1; // 現在の表示ページ番号 var sldShwStopFlg = false; // スライドショー停止フラグ //==================================================================== //======================================== // // 初期化 // //======================================== // 引数 :なし // 返り値:なし // 仕様 :ウィンドウのサイズを変更したり // ファイルを読み込んだりする。 function initWin () { //==== 変数を初期化 ============================================== // var myPath; // スクリプトのパス var myFolder; // フォルダ名 var XL; // Excelオブジェクト var book; // Excelのワークブック var sheet; // Excelのワークシート var csvStr; // CSV読み込み用テキスト var tmpArry, tmpArry2; // 仮置き用配列 var i, j; // カウンター用変数 //==== ウィンドウサイズの調整 ================================== // moveTo( thisWinX, thisWinY ); resizeTo( thisWinW, thisWinH ); //==== IEを初期化 ================================================ // // IEのオブジェクトを初期化 IE = new ActiveXObject( "Internet Explorer.Application" ); // IEのウィンドウの設定 IE.Left = viewWinX; IE.Top = viewWinY; IE.Width = viewWinW; IE.Height = viewWinH; IE.Visible = true; //==== パスを初期化 ============================================== // // スクリプトのパスを取得 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.WindowState = xlMinimized; XL.Visible = true; // ファイルを開く book = XL.WorkBooks.Open( myFolder + xlPath ); // 操作先シートを決定する sheet = book.worksheets(1); sheet.Activate; //==== ExcelをCSVで保存 ========================================== // // ダイアログを表示させないようにする XL.DisplayAlerts = false; // 保存 book.SaveAs( myFolder + csvPath, xlCSV ); // Excel終了 XL.Quit(); //==== CSVの読み込み ============================================= // // CSVファイルの読み込み csvStr = getFile( myFolder + csvPath ); delFile( myFolder + csvPath ); if ( csvStr.length == 1 ) { alert("リストが存在しません。\nアプリケーションを終了します。"); IE.Quit(); close(); return; } // 改行コードで配列化 csvStr = csvStr.replace( /\r/g, "" ); csvStr = csvStr.replace( /\n$/, "" ); tmpArry = csvStr.split( "\n" ); // CSV用配列の初期化 csvArry = new Array( tmpArry.length ); // 二次元配列に格納 for ( i = 0; i < tmpArry.length; i ++ ) { // カンマ区切りで配列化 tmpArry2 = tmpArry[i].split( "," ); // 配列の初期化 csvArry[i] = new Array( tmpArry2.length ); // 二次元配列にデータを格納 for ( j = 0; j < tmpArry2.length; j ++ ) { csvArry[i][j] = tmpArry2[j]; } } //==== 読み込みファイル数反映 ==================================== // if ( csvArry[0].length % datMax == 0 ) { f.dataNow.value = nowViewNo; f.dataSum.value = csvArry.length; f.url.value = csvArry[nowViewNo][datUrl]; } else { alert("リストが不正です。\nアプリケーションを終了します。"); IE.Quit(); close(); return; } //==== リストを作成 ============================================== // var i; var len; for ( i = 0; i < csvArry[0].length; i += 2 ) { len = f.select.length; f.select.options[len] = new Option( csvArry[0][i] + " " + csvArry[0][ i + 1 ], i ); } //==== URL読み込み =============================================== // IE.Navigate( csvArry[nowViewNo][datUrl] ); //==== 終了処理 ================================================== // wait( function f0() { // 待機処理終了条件 if ( ! IE.Busy ) return true; return false; }, function f1() { // 終了時実行処理 IE.Document.focus(); focus(); } ); } //==================================================================== //======================================== // // 待機処理 // //======================================== // 引数 :チェック用関数、終了時実行関数 // 返り値:なし // 仕様 :待機処理を行う。 function wait( cFunc, eFunc ) { if ( cFunc ) { chkFunc = cFunc; } if ( eFunc ) { objFunc = eFunc; } if ( chkFunc && chkFunc() ) { WaitCnt = 0; if ( objFunc ) objFunc(); return; } if ( WaitCnt > Timeout ) { WaitCnt = 0; return; } WaitCnt += WaitTime; setTimeout( "wait()", WaitTime ); } //==================================================================== //======================================== // // ファイル読み込み // //======================================== // 引数 :ファイルの絶対パス // 返り値:読み込んだテキスト // 仕様 :テキストファイルを開いて読み込む。 function getFile( path ) { //==== エラー対策 ================================================ // if ( ! fs.FileExists( path ) ) return ""; // ファイルが存在しない //==== 変数の初期化 ============================================== // var resStr = ""; var stream; //==== ファイルの読み込み ======================================== // try { stream = fs.OpenTextFile( path, 1 ); resStr = stream.ReadAll(); stream.Close(); } catch ( e ) { } return resStr; } //==================================================================== //======================================== // // ファイル削除 // //======================================== // 引数 :ファイルの絶対パス // 返り値:なし // 仕様 :ファイルを削除する。 function delFile( path ) { //==== ファイルの削除 ============================================ // try { fs.DeleteFile( path ); } catch ( e ) { } } //==================================================================== //|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //==================================================================== //======================================== // // 進む // //======================================== // 引数 :なし // 返り値:なし // 仕様 :ページを1ページ進める。 function goPage () { //==== 進行処理 ================================================== // nowViewNo ++; if ( nowViewNo >= csvArry.length ) nowViewNo = 1; f.dataNow.value = nowViewNo; f.url.value = csvArry[nowViewNo][ f.select.value * 1 + datUrl ]; IE.Navigate( csvArry[nowViewNo][ f.select.value * 1 + datUrl ] ); } //==================================================================== //======================================== // // 戻る // //======================================== // 引数 :なし // 返り値:なし // 仕様 :ページを1ページ戻す。 function backPage () { //==== 後退処理 ================================================== // nowViewNo --; if ( nowViewNo <= 0 ) nowViewNo = csvArry.length - 1; f.dataNow.value = nowViewNo; f.url.value = csvArry[nowViewNo][ f.select.value * 1 + datUrl ]; IE.Navigate( csvArry[nowViewNo][ f.select.value * 1 + datUrl ] ); } //==================================================================== //======================================== // // スライドショー開始 // //======================================== // 引数 :なし // 返り値:なし // 仕様 :スライドショーを実行する。 function doSldShw () { //==== スライドショー実行 ====================================== // document.getElementById("ssStat").innerText = "スライドショー実行中"; goPage(); wait( function f0() { //==== 読み込み待機 ========================================== // if ( ( ! IE.Busy && WaitCnt >= 2000 ) || WaitCnt >= 4000 ) return true; return false; }, function f1() { //==== ページ進行 ============================================ // if ( sldShwStopFlg ) { sldShwStopFlg = false; return; } doSldShw(); } ); } //==================================================================== //======================================== // // スライドショー停止 // //======================================== // 引数 :なし // 返り値:なし // 仕様 :スライドショーを停止する。 function stopSldShw () { //==== スライドショー停止 ====================================== // document.getElementById("ssStat").innerText = "スライドショー停止"; sldShwStopFlg = true; } //==================================================================== //--> </script> </head> <body onLoad="initWin();"> <form name="f"> <input type="txt" name="dataNow" value="0" size=5> / <input type="txt" name="dataSum" value="0" size=5> <input type="txt" name="url" value="" size=80><br> <input type="button" value="≪ 戻る" onClick="backPage()"> <input type="button" value="停止■" onClick="stopSldShw()"> <input type="button" value="スライドショー ≫" onClick="doSldShw()"> <input type="button" value="進む ≫" onClick="goPage()"> <span id="ssStat"></span><br> <select name="select"> </select> </form> </body> </html>
作成したアプリケーションの使い方に関しては、第1回、第2回を参照してください。
それほどブラッシュアップしていないツールですので、実際に使い込む際には、自分でカスタマイズしてから使った方が良いと思います。また、予想外のエラーが出る可能性も否定できません。インターネット系のアプリケーションは、入力が予測できないので、使っている内にさまざまな不具合を発見したりしますので。そこらへんは、創意工夫で乗り切ってください。
おわりに
第1回から第3回にわたって、IEとExcelを使って簡単なアプリケーションを作成してみました。日常使っているアプリケーションも、使い方次第で強力なツールに早変わりします。今回の連載で、自分なりの活用アイデアがさまざまと浮かんできたかもしれません。手軽にプログラミングできるものですので、ぜひ皆さまも活用してみてください。
それでは短い連載でしたが、ありがとうございました。
