Help us understand the problem. What is going on with this article?

Excel の WEBSERVICE 関数で外部データ取得

More than 3 years have passed since last update.

Excel 2013 から導入された WEBSERVICE 関数を使うとマクロを使わずに外部のデータを取得することができます。この記事では WEBSERVICE 関数の使い方やはまりどころなどを紹介します。

基本情報

以下の書式で使用することができます。

WEBSERVICE(URL)

URL (必須) によって指定された URL に対して GET リクエストを発行して、その結果文字列を返す、というのが基本的な挙動です。以下のような注意書きがついています。

  • 引数がデータを返せない場合、エラー値 #VALUE! が返されます。
  • 引数が無効な文字列と判明した場合、または引数がセルの許容範囲である 32767 文字を超える文字列になった場合、エラー値 #VALUE! が返されます。
  • URL の文字列が GET 要求の許容範囲である 2048 文字を超える場合、エラー値 #VALUE! が返されます。
  • ftp:// や file:// などのサポートされていないプロトコルの場合、WEBSERVICE はエラー値 #VALUE! を戻します。

使い方

ためしに Qiita の robots.txt http://qiita.com/robots.txt を取得してみましょう。
手順は以下のとおりです。

1. 新規の Excel ワークシートを作成

2. A1 セルにて以下の関数を入力

=WEBSERVICE("http://qiita.com/robots.txt")

image

3. セルに robots.txt が挿入される

image

セルの幅・高さを調整して 折り返して全体を表示 を有効にするとこのような表示になります。

image

エラーが起きるケースではこのような表示になります。

image

サーバ側では?

手元のサーバで試してみたところ、WEBSERVICE 関数からのリクエストには以下のような HTTP ヘッダが設定されていました。サーバ側では User-Agent を使って判定することができるかもしれません。

Connection: Keep-Alive
User-Agent: Excel/15.0
Host: localhost

あと、コンテンツの文字コードは UTF-8 にしておくのが無難なようです。 ためしに text/plain; charset=Shift_JIS のように設定したコンテンツは EXCEL 側で文字化けを起こしていました。

制限事項

ファイル形式

WEBSERVICE 関数は FILTERXML 関数 と組み合わせることで、XML を返す Web API からのデータの取得が想定されています。もしも JSON や CSV のようなデータ形式を扱おうとすると、EXCEL の関数だけでパースをしなければならないので難易度が高いです(マクロを使ったほうが簡単)。

入力文字数

URL の文字列が GET 要求の許容範囲である 2048 文字を超える場合 にエラーになるという制限があるので、たとえば SPARQL Endpoint に SPARQL Query を投げるようなケースでは注意が必要になります。

出力文字数

セルの許容範囲である 32767 文字を超える文字列になった場合 にエラーになるという制限があるので、あまり大きなレスポンスが返ってくるようなサービスと組み合わせるとうまくいかないことがあります。

関数の同時呼び出し

WEBSERVICE 関数を入力したセルを別のセルにコピー&ペーストする場合には、ペーストされた直後に一斉に WEBSERVICE 関数が実行されることになります。これは結構負荷の高い処理になりがちなので注意が必要です。Excel から一時的に応答がなくなったり、挙動が不安定になることもあります。なお、一度実行された結果は計算結果としてキャッシュされるので、明示的に指定しないかぎり再計算は発生しない挙動のようです。

セキュリティ

WEBSERVICE 関数を使ったワークシートを作成して、保存してみます。

image

これを再度開いたとき、デフォルトでは Web サービス機能は無効になっています との警告が出ます。

image

このように WEBSERVICE 関数は明示的に有効化して使用する必要があります。マクロなんかと同様のセキュリティレベルにあるといえます。用途に応じては、関数部分を値だけコピーしたり、そもそも CSV にして配布する、といった方法が歓迎されるかもしれません。

まとめ

WEBSERVICE 関数を紹介しました。マクロを使わずに外部サービスのデータを利用できる便利なものですが、反面、制限が多く使い方にも注意が必要です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした