業務アプリでは、少々無茶でもやらなきゃいけない時があります。
ルールを守ってコストパフォーマンスを上げます。
ボタンを押したら決められたローカルのディレクトリに Excel をダウンロード
そのサイトを信頼してしまうと、IE は通常アプリケーションとして動作します。
ログインしているユーザの責任で、WEB はハードディスクの一部になります。
上記画像のサンプルでは、ローカルの WEB サーバを「信頼するサイト」
に登録していますが、外部の WEB でもかまいません。
以下の関数は、呼び出すと WEB 上のファイルをダウンロードした後、
c:\tmp\webexcel.xls として 保存します。
ダウンロードするファイルは、信頼するサイトである必要はありません。
IE 上で表示している HTML が 信頼するサイトであれば良いです。
function download() {
var objSrvHTTP = new ActiveXObject("Msxml2.ServerXMLHTTP");
var Stream = new ActiveXObject("ADODB.Stream");
objSrvHTTP.open("GET", "http://localhost/php/test/BookBase.xls", false );
objSrvHTTP.send();
Stream.Open();
Stream.Type = 1;
Stream.Write( objSrvHTTP.responseBody )
Stream.SaveToFile( "c:\\tmp\\webexcel.xls", 2 );
Stream.Close()
}
Msxml2.ServerXMLHTTP は、サーバー用のオブジェクトです。
( もしエラーになる場合は、Msxml2.ServerXMLHTTP.6.0 と書いてみるといいです )
Msxml2.XMLHTTP でも動作しますが、ダウンロード先のドメインと、HTML のドメイン
が一致する必要があります。ただ、経験上、問題無いのであれば Msxml2.XMLHTTP のほうを
使ったほうがトラブルは少なくて済みます。
いずれにしても、あまり大きなファイルは避けないと、メモリを圧迫するので注意して下さい。
これも、経験上数メガなら大丈夫だとは思います。
力任せの WEB アプリ (2) では、ダウンロードした Excel を IFRAME に埋め込んで、
VBScript から IFRAME 内の Excel を変更します
|