こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBSCRIPTで、DB2のデーターベースに接続して、データーを取得し

VBSCRIPTで、DB2のデーターベースに接続して、データーを取得しCSVファイルに保存する処理を作っています。そのときに、その経過をinternet explorerに表示しています。そのIEの画面上で、ろーかるに保存したCSVファイルへのリンクを作成して、それをクリックするとファイルが開くようにしたいのですが、そのリンクのHTMLの書き方がわかりません。
基本できな事とは思いますが、誰か教えていただけませんか?

宜しく御願いします。

投稿日時 - 2010-02-24 08:02:39

QNo.5701936

困ってます

質問者が選んだベストアンサー

>※今まで費やした時間は何だったんでしょうねぇ?  (^凹^)
 失礼いたしました。  <(_ _)>

 humipinedesu さんにとっては余り収穫がなかったかも知れませんが、私的には、「CreateObject("InternetExplorer.Application") 」の「Document.Body.InnerHTML」でこのようなことができるということが分かったことが、却って大変な収穫でした。
 ありがとうございました。


 ところで、「about:blank」の ページ をそのまま [ファイル(F)] - [名前を付けて保存(A)] し、これを メモ帳 で開いてみると、

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0011)about:blank -->
<HTML><HEAD>
<META content="text/html; charset=unicode" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18702"></HEAD>
<BODY></BODY></HTML>

というような HTML タグ が自動で書き込まれているのですが、先ほどの回答に
>なお、「C:\AutoWatch\dami.html」の中身はからっぽで構わない
と書きましたように、「C:\AutoWatch\dami.html」に上記の HTML タグ が入っていると リンク が機能しませんでした。

 1行ずつ削除して試してみますと、
<!-- saved from url=(0011)about:blank -->
の行に問題があるようで、やはり「about:blank」がくせ者のようです。

 以上、ご報告でした。   <(_ _)>

投稿日時 - 2010-02-27 08:58:10

補足

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0011)about:blank -->
<HTML><HEAD>
<META content="text/html; charset=unicode" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18702"></HEAD>
<BODY></BODY></HTML>

そちらからの追加報告について、私の感想なのですが、

つまり、htmlタグの記述が何もないdami.htmlを、
コード上で、objExplorer.Navigatorメソッドにそのファイルのパスを設定すると
インターネットのセキュリティが機能せず、ファイルが開けるが

HTMLタグを記述したファイルをNavigatorメソッドに設定して
それに、コード上で リンクをセットして
それで生成されたリンクを開こうとすると
インターネットのセキュリティが機能して、ファイルが開けない

というように機能するのかな・・・というふうに想像しています。

だから、htmlファイルをテキストファイルとして読み込み、それに
直に書き込みして、objExplorer.Refreshで
表示を更新してやるのが一番確実なのかなと

私のほうでなんかも検証していませんので、確かとはいえませんが

投稿日時 - 2010-02-28 14:38:36

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.6

 おはようございます。

 朗報です。

>ダミーのhtmlファイルをローカルの"C:\AutoWatch"の
>フォルダの中に作り、そして、このhtmlファイルのパスと
>ファイル名を、(1)のNavigateに設定したのです。
>objExplorer.Navigate "C:\AutoWatch\dami.html"
>そして、このdami.htmlを

 この次ですが、
>テキストファイルとして読み込んで、
>そのStreamオブジェクトにWriteLineメソッドを使って、
>htmlのリンクの式を代入
するのではなくて、当初お示しの スクリプト そのままでいくと リンク を開くことができました。

 ご想像のように
>"about:blank"と設定していますが、これでは、
>何もページが設定されていないのと同じで、
>この状況だとリンクを式で代入してもファイルを
>開くことができないのかな・・
ということのようですね(私にも原因はさっぱり分かりません)。

Set objExplorer = WScript.CreateObject("InternetExplorer.Application")
objExplorer.Navigate "C:\AutoWatch\dami.html"
objExplorer.Visible = vbTrue
objExplorer.Document.Body.InnerHTML = "<a href=""file:///" & strPathAndFile & """>" & strName & "<a/>"

 なお、「C:\AutoWatch\dami.html」の中身はからっぽで構わないようです。

※今まで費やした時間は何だったんでしょうねぇ?  (^凹^)

投稿日時 - 2010-02-27 08:37:44

ANo.5

DOUGLAS_ です。

 謎が氷解いたしました。

 先ず、「携帯」の件は、話がややこしくなるだけですので、やめておきます。

 次に
>ソースを見ても、<html></html>だけしか表示されていません。
とのことですが、結論から申しますと、VBSCRIPT によって HTML タグ が生成できていない、ということになります。

 「CreateObject("InternetExplorer.Application") 」は、WEB ページ を参照、もしくは WEB ページ から データ を取得するための オブジェクト であって、「Document.Body.InnerHTML」を書き込んでも保存はできないと存じます。
 試しに、
objExplorer.Document.Body.InnerHTML = "<a href=""file:///" & strPathAndFile & """>" & strName & "<a/>"
としたあとに、[F5] キー を押下して、ブラウザ を更新すると、「strName」の部分の リンク文字 が消えてしまいます。
 つまり、見かけだけの リンク文字 というようなことになりましょうか。

>でも、右クリックで、CSVファイルの保存は可能です。
 不思議な現象ですが、結局、この オブジェクト で書き込みが可能なのは、テキストフレーム や フォーム のみかと存じます。

 やはり、HTML タグ を書き込むためには、「CreateObject("Scripting.FileSystemObject")」で HTML ファイル に WriteLine しなければならないかと存じます。
 この件につきましては、自己解決されたようですが、1つめのご質問につきましては、以上でお分かりいただけましたでしょうか?


 2つ目のご質問ですが、上記のような事情から、
>htmlファイルのパス名をNavigateにセットした上で、上記のように
>objExplorer.Document.Body.InnerHTML = (リンクの式)
とするのではなくて、やはり
ア)「CreateObject("Scripting.FileSystemObject")」を生成
イ)「C:\AutoWatch\dami.html」を読み込んで、HTML タグ を WriteLine
ウ)「C:\AutoWatch\dami.html」を保存して「CreateObject("Scripting.FileSystemObject")」を初期化
というような段取りになろうかと存じます。

 したがって、前のご質問の「補足」のところにお書きになっている内容につきましては、
A)vb SCRIPT で、自動でデーターベースにアクセスして、その結果をCSVファイルに出力し、ローカルのフォルダに保存しています。
 この件はできているわけですね。

B)その処理を行う時に、VBSCRIPT で、インターネットエクスプローラーを開き、結果を表示する事を行っています。
 これについてもできているわけですね。

C)そこで、ついでに、そのインターネットエクスプローラーの画面に出力したCSVファイルへのリンクを作成して表示し、クリックするとそのファイルが開くようにしたい
とのことですが、(B)で「結果を表示する事を行ってい」らっしゃるのでしたら、そのときに、「CSVファイルへのリンクを作成」されたらよいのではありませんか?

 それとも、「結果を表示する事」自体を「CreateObject("InternetExplorer.Application") 」の「Document.Body.InnerHTML」で行なっていらっしゃるということでしょうか?
 まぁ、結果の表示だけでしたら、「Document.Body.InnerHTML」でもできるのでしょうから、それ自体は問題ではありませんが、リンク が機能しない以上、方法を変えざるを得ませんね。

投稿日時 - 2010-02-27 01:47:04

お礼

何回も丁寧に説明して頂き、有難うございました。この質問と回答のやりとりと言うのは、その間に実際に試す作業が入り、その相乗効果で大変勉強になります。レベル的に簡単な事でも、色々と考え、試行錯誤してやると、自分の身につくのがよくわかります。
有難うございました。

投稿日時 - 2010-02-27 02:54:18

ANo.4

DOUGLAS_ です。  <(_ _)>

>試しにローカルに空のHTMLふぁいるを作成しで、
>そのなかに同じLINKを書いて保存して開くと、
>リングは機能しています。つまり、ファイルを開く事が出来ます。
 了解しました。
 ということは、[ANo.2] の(3)が原因ではないということになります。
 (^。^;)ホッ! です。


>HREFは、携帯からタイプしていますから、
>勝手に小文字を大文字に変換されてしまっているだけです。
 こちらも了解しました。
 というか、「携帯からタイプして」いらっしゃるということ自体が、逆に私にとっては ?? です。

 ここで新たな疑問が湧くのですが、
・前のご質問に「IEの小さい画面」と書いていらっしゃるのは「携帯の画面」でしょうか?
・「vbscriptで、以下のように出力しています。」とお書きなのも、携帯から WEB ページ に アクセス して、携帯で vbscript を記述していらっしゃる、ということですか?
 もし、そうだとすると、前のご質問の「補足」のところにお書きになっている内容が、さっぱり理解できなくなってしまいます。

 この件が理解できないと、これ以上の アドバイス は困難ですので、先ず、前のご質問の「補足」についての下記の7つの質問にお答え願います。

【質問1】「vb SCRIPTで、自動でデーターベースにアクセス」するのは、パソコン ですか? 携帯ですか?
【質問2】「その結果をCSVファイルに出力し、ローカルのフォルダに保存しています。」その保存先は?  WEB サーバー? ローカル の サーバー? humipinedesu さんの パソコン の中? まさか、携帯の中?
【質問3】「その処理を行う時に、VBSCRIPT で、インターネットエクスプローラーを開き、結果を表示」しているのはパソコンですか? 携帯ですか?
【質問4】「ついでに、そのインターネットエクスプローラーの画面に出力したCSVファイルへのリンクを作成して表示し、クリックするとそのファイルが開くようにしたい」のは、パソコンですか? 携帯ですか?
【質問5】「ファイルの名前は、ある文字列の後ろに、その日の日付と時間が数字だけでくっついた形式にしています。」とお書きの「ファイル」はどこに保存されているのでしょうか?
【質問6】「この場合に、VB SCRIPTで動的にインターネットエクスプローラーにリンクを作成して、書き込むようにしようと考えています。」とのことですが、そのそも【質問1・3・6】の VBSCRIPT は同じ 実行ファイル なのでしょうか?
【質問7】それと、その 実行ファイル は、どこに保存されているのでしょうか?

投稿日時 - 2010-02-26 16:28:36

補足

>【質問1】「vb SCRIPTで、自動でデーターベースにアクセス」するのは、パソコン ですか? 携帯ですか?
パソコンです。
誤解を招く書き方だったのでしょうか。すみませんでした。

>【質問2】「その結果をCSVファイルに出力し、ローカルのフォルダに保存しています。」その保存先は?
保存先は、ノートのパソコンです。
ノート→LAN→サーバーのDB
当然、結果を表示しているのはローカルのノートブックです。
CSVファイルは、このノートの中「C:\AutoWatch\CSV」フォルダの中に保存します。
この時に使用しているVB Scriptの実行ファイルは、一つだけです。
VB Scriptのファイルは、ローカルのノートのどこにでも保存可能です。
自分自身のパスは、この処理では関係ありません。

でも、実は、携帯からでもサーバーのデータベースを読みにいくようなものを作れるのでしょうか。私の質問からは脱線したことではありますが、逆にとっても興味が出ました。
携帯から、サーバーのデータを読みに行くには、まずサーバーと携帯をどうつなぐか・・・
というのが疑問に出てきます。
このことについても、何か後存じてあれば、コメントを買いくださるのも大歓迎ですよ。

それから、実はこの私の最初の質問については、自分で解決法を見つけたのですが、まだ、なぜ私が既に説明した方法でできないのか理由がわかりません。
以下にもう一度書きますので、もし、そのできなかった方法がご説明できるのであれば、書いていただきたいです。

1) VB SCRIPTの CreateObject →InternetExplorerのオブジェクトを生成
Set objExplorer = WScript.CreateObject("InternetExplorer.Application")
objExplorer.Navigate "about:blank"
objExplorer.Visible = vbTrue

2) そのオブジェクトのBodyに、以下のような記述で、式を代入してリンクを設定しました。
objExplorer.Document.Body.InnerHTML = "<a href=""file:///" & strPathAndFile & """>" & strName & "<a/>"

3) 開いた画面で、リンクをクリックしてもファイルは開きません。
でも、右クリックで、CSVファイルの保存は可能です。
ソースを見ても、<html></html>だけしか表示されていません。

(1)のNavigateに、"about:blank"と設定していますが、これでは、何もページが設定されていないのと同じで、この状況だとリンクを式で代入してもファイルを開くことができないのかな・・・と考えて、ダミーのhtmlファイルをローカルの"C:\AutoWatch"のフォルダの中に作り、そして、このhtmlファイルのパスとファイル名を、
(1)のNavigateに設定したのです。

objExplorer.Navigate "C:\AutoWatch\dami.html"

そして、このdami.htmlを
テキストファイルとして読み込んで、そのStreamオブジェクトにWriteLineメソッドを使って、htmlのリンクの式を代入して、

objExplorer.Refresh

とすると、インターネットエクスプローラに、ファイルにセットしたリンクが表示されました。そして、そのリンクをクリックしたら、ファイルが開けたわけです。

(1) そこで、私の疑問ですが、なぜ
objExplorer.Navigate "about:blank"
では、
objExplorer.Document.Body.InnerHTMLにリンクの式をセットしても、ファイルが開けないのでしょうか。

(2) HTMLファイルをテキストファイルとして読み込んで書き込むのではなく、
htmlファイルのパス名をNavigateにセットした上で、上記のように

objExplorer.Document.Body.InnerHTML = (リンクの式)
でも、可能でしょうか。

よろしくお願いします。

投稿日時 - 2010-02-27 00:42:40

ANo.3

>OSは、WINDOWS2K
とのことで、私には検証できませんが、確か XP よりは エンジニア 向きの OS だったように思いますので、その点で問題はないかと存じます。

>VBSCRIPTでデバッグがうまくできない
 まぁ、普通は Windows Script Debugger や Microsoft Script Editor などで デバッグ されるのでしょうが、私には、そこまでの必要がありませんし、使い方から勉強し直さなければなりませんので、試したことはありません。

 私は、エクセル の VBA に翻訳して VBE で ステップ イン デバッグ([F8] キー)しています。

>書き方が実際、きちんと出来て居るがどうかの確認
は、VBE の イミディエイト ウィンドウ や ウォッチ ウィンドウ で確認できます。

 ちなみに、エクセル VBE で
strPathAndFile = "(ローカルパスとファイル名)"
strName = "文字列"
Debug.Print "<a HREF=""file:///" & strPathAndFile & """>" & strName & "</a>"
として実行してみると、
<a HREF="file:///(ローカルパスとファイル名)">文字列</a>
という結果が帰ってきました。

>=?<a HREF=""file:///" & strPathAndFile & """>" & strName & "</a>"
>と式で代入しています。
とお書きですが、先頭の「?」は「"」の誤りですよね?

 「式で代入して」いらっしゃる意味は、
~~.WriteLine "<a HREF=""file:///" & strPathAndFile & """>" & strName & "</a>"
と書くと長ったらしくなるからかと存じますが、
・スクリプト にどのように書いているか
ということより、
・結果として吐き出された HTML コード が、どのように書かれているか
という方が問題かと存じます。

>マウスで右クリックしてファイルに保存する事は可能
とのことですが、わざわざ「ファイルに保存」しなくても、「マウスで右クリックし」たときに [ソースの表示(V)] というのはありませんか?
 あるいは、Internet Explorer の メニュー に [表示(V)] - [ソース(C)] というのがあるはずですので、そこから ソース を表示させて、実際に吐き出された HTML コード をご確認ください。

 「実際に吐き出された HTML コード」が
<a HREF="file:///(ローカルパスとファイル名)">文字列</a>
となっているのでしたら、試しに「HREF」を小文字(href)にしてお試しください。

 それでも駄目なようでしたら、前回答の(3)が原因と考えられます。

投稿日時 - 2010-02-26 09:59:47

補足

マウスで右クリックしてソースの表事をすると、<HTML></HTML>とだけ、表示されています.
HREFは、携帯からタイプしていますから、勝手に小文字を大文字に変換されてしまっているだけです。

internet explorer は、以下のように実行しています。

Set objExplorer = WScript.CreateObject("InternetExplorer.Application")

objExplorer.Document.Body.InnerHtml= strLink

試しにローカルに空のHTMLふぁいるを作成しで、そのなかに同じLINKを書いて保存して開くと、リングは機能しています。つまり、ファイルを開く事が出来ます。

どこが、足りないのでしょうか?

投稿日時 - 2010-02-26 14:46:35

ANo.2

[ANo.1] の DOUGLAS_ です。

●ローカルにあるCSVファイルを、IEのリンクをクリックする事で開きたい
http://okwave.jp/qa/q5689101.html
の方を拝見いたしました。

 すでに、
>〈a href="file://(ローカルパスとファイル名)"〉文字列〈/a〉
という文法はご存じのようですが。。。

1)ひょっとして、
・「a href」の前の「〈」
・「文字列」の前後の「〉」と「〈」
・「/a」の後ろの「〉」
などが、このままということはないでしょうね。

 [ANo.1] に私が書きましたように
<a href="file:///(ローカルパスとファイル名)">文字列</a>
というような感じで
「〈」と「〉」
ではなくて、
「<」と「>」
を使わなくてはなりません。

 そこを直しても駄目なようでしたら、「file://」の部分を「file:///」に変えるか、もしくは、取り払ってお試しください。

2)ちなみに、
>ファイルの名前は、ある文字列の後ろに、
>その日の日付と時間が数字だけでくっついた形式にしています。
とのことですが、その ファイル名 に「/」(スラッシュ)や「:」(コロン)は入っていないでしょうね!

3)上記(1)(2)がともに問題ないようでしたら、OS あるいは IE の セキュリティ の設定かと思われます。
 お使いの OS が Vista あるいは Windows7 でしたら、私は検証のしようがありませんが、同様の質疑でふと思い付いたことがありますので、こちらをご覧ください(ただし、回避策になるかどうかの確証はまったくありませんが。。。)。
●a href="xxx"の作りはVistaのPCに起動できない
http://okwave.jp/qa/q5515129.html
の [ANo.3] です。

投稿日時 - 2010-02-25 19:19:17

補足

丁寧な説明有難うございます。
私が使用して居るOSは、WINDOWS2Kです。
VBSCRIPTでデバッグがうまくできないから
書き方が実際、きちんと出来て居るがどうかの確認が出来ませんので、画面で表示されているぶぶんからはそのソースも見れないし。画面のリンクをクリックしても何も変化はありませんが、マウスで右クリックしてファイルに保存する事は可能です。
ソースで書いているのは、

=?<a HREF=""file:///" & strPathAndFile & """>" & strName & "</a>"
と式で代入しています。

画面で表示されたときの現象は先に説明した通りとなります。

書き方を前に説明された様に変えて為して見たいと思います。
また、お知らせしますね。
有難うございます。

投稿日時 - 2010-02-25 23:50:04

ANo.1

>ろーかるに保存したCSVファイル
の フルパス を「D:\hoge\hoge.csv」とすると、
>そのリンクのHTMLの書き方

<a href="file:///D:\hoge\hoge.csv">CSVファイル</a>
とか、
<a href="D:\hoge\hoge.csv">CSVファイル</a>
でもいけますか。

 なお、「CSVファイル」の部分は、
>リンクを作成して、それをクリックするとファイルが開くようにしたい
その、リンク の部分に表示される文字列ですので、何でもお好きな言葉をどうぞ。

投稿日時 - 2010-02-24 08:12:43

あなたにオススメの質問