2012年11月3日土曜日

エクセルのWebクエリでログインまでしちゃう方法

昔に比べると、社内業務システムも柔軟になってきて、Webブラウザだけで入出力ができるようになり、会計上のルールで印刷が必要な場合にはPDFで出力できるようになってる。

しかしながら、グラフに出力してみたり、分析の軸をあれこれ変えてみたいというニーズに対しては、サーバーサイドエンジニアリングは、「素のエクセル」の前には手出しができない。やりたいことがエクセルならエクセルでやってもらうのが一番。

ところが、エクセルには情報を収集する仕組みがなく、情報システムのDBに格納されている。間をとって、CSV出力機能を設けているところが多いだろうが、Webシステムからのダウンロードは、PCのダウンロードフォルダを汚す。何よりも重要な情報が暗号化されてない中間ファイルが存在することがよろしくない。

そこで、最もエクセルと情報システムとを最短距離で結ぶのが、エクセルのWebクエリ機能。機能としてはシンプルで、ブラウザにHTMLのTABLEとして出力されているものが、そのままエクセルのセルにセットされる。

中間ファイルがなく、さらに情報システムも特殊なことをしないでよい。

ところがこのWebクエリ、画面遷移ができない。とあるURLをGETするだけ。だから、ログインが必要な深い画面で、Webクエリを使うと単にログインフォームを取得するだけになる。

じゃぁってことで、エクセルの別の昨日で、ログインをしておけば、きっと同じセッションを使えるはずだから、Webクエリでもログイン後の画面が見えるはず。

ということで長くなったけど、手順。

1.開発ツールから挿入→AnctiveXコントロール→コントロールの選択を選ぶ
2.MicroSoft Web Brouser を選択

3.そのままだと、どこにもナビゲートできないので、マクロで画面を遷移させる
この例では、シートがアクティブになった瞬間に、フェースブックのトップページに移動している。

あとは、デザインモードを解除して、シートをアクティブにすると、ログインフォームが画面上に出てくるので、手動でログインすればよい。オートメーションでログインまするという方法もできそうではあるが、それはセキュリティの穴を作ることになるので、要求があってもやらない。

これで、ログイン後にしか見れない画面のTABLEをWebクエリで取得ができる。Webクエリそのものの説明はあちこちにあるのでそちらを参照。

ちなみに、表のデータなのにがんばってDIVで表現しているページがあったりすると、Webクエリは使えない。いやいや表なんだからTABLEで表現しなさいよと。Tableタグを排除するのがモダンなHTMLなんだと勘違いしている先進的コーダ-はちと困る。

ログイン機能付きWebクエリつきエクセルファイルは、位置づけとしては、「分析機能の付いたブラウザ」。データを保存しなければ、セキュアだし、仮に保存したとしても、エクセルには暗号化機能があるので、CSVよりはセキュリティ的にまし(少なくとも内容が検索インデックスされることはない)。



1 件のコメント:

  1. Office 2013ではWeb BrowserのActiveXを挿入するためには、↓のレジストリ修正が必要になるみたいですね。
    http://support.microsoft.com/kb/2793374/ja

    返信削除