まとめ(完成プログラム)
完成したプログラムは以下の通りです。前回よりも長くなっていますが、やっていることはそれほど難しくはありません。
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <html> <head> <title>ExcelのURLを、IEでスライドショー表示</title> <script language="JavaScript"> //<!-- //==== ユーザー変数の初期化 ====================================== // var xlPath = "save.xls"; // Excelファイルのファイル名 var csvPath = "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 = 0; // 現在の表示ページ番号 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( "InternetExplorer.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 ) { f.dataNow.value = ( nowViewNo + 1 ); f.dataSum.value = csvArry.length; f.url.value = csvArry[nowViewNo][datUrl]; } else { alert("リストが不正です。\nアプリケーションを終了します。"); IE.Quit(); close(); return; } //==== 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 ) == 0 ) 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 = ( nowViewNo + 1 ) % csvArry.length; f.dataNow.value = ( nowViewNo + 1 ); f.url.value = csvArry[nowViewNo][datUrl]; IE.Navigate( csvArry[nowViewNo][datUrl] ); } //==================================================================== //======================================== // // 戻る // //======================================== // 引数 :なし // 返り値:なし // 仕様 :ページを1ページ戻す。 function backPage () { //==== 後退処理 ================================================== // nowViewNo --; if ( nowViewNo < 0 ) nowViewNo = csvArry.length - 1; f.dataNow.value = ( nowViewNo + 1 ); f.url.value = csvArry[nowViewNo][datUrl]; IE.Navigate( csvArry[nowViewNo][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> </form> </body> </html>
以下、作成したアプリケーションの簡単な操作マニュアルを書いておきます。
- Explorer上で「web_slide_show.hta」をダブルクリックして、ウィンドウを起動する。
- [スライドショー]ボタンを押すと、スライドショーを実行する。
- [停止]ボタンを押すと、スライドショーを停止する。
- [前へ][戻る]ボタンで1ページずつ進行させることが可能。
- 終了する際は、ウィンドウ右上の[×]ボタンをクリックしてアプリケーションを終了する。
厳密なエラー回避処理は行っていないので、本格的に利用する際は、各処理にエラー時の処理を追加するとよいでしょう。
おわりに
IEやExcelは、日常的によく使うアプリケーションです。この2つのアプリケーションを連携させると、いろいろなことができます。前回のように情報収集にも使えますし、今回のように情報を閲覧するのにも使えます。アイデア次第でどんどん活用することができます。
次回は、前回と今回のプログラムを応用して、実用的で便利なアプリケーションを作成しましょう。今回の連載の総まとめです。それでは次回をお楽しみに。
