
私は、WebService と FilterXML の数式を使用して Bing の API とインターフェイスし、そこからデータをドラッグして戻す Excel スプレッドシートを Excel 2016 で作成しました。数式は Excel 2016 では問題なく動作しますが、スプレッドシートを Excel 2010 などの古いバージョンに読み込むと、#Name? エラーが生成され、結果が返されません。これは、Webservice と FilterXMl の数式が古いバージョンの Excel と互換性がないことが原因であると考えられます。
基本的に、コードは次のようになります。
Sheet2 というシートのセル C2 から API キーを取得します。セル C25 から開始場所を取得します (これは変数であり、ユーザーが変更できます)。セル D25 から終了場所を取得します (これは変数であり、ユーザーが変更できます)。セル C27 から輸送モードを取得します (これは変数であり、ユーザーが変更できます)。URL は C29 に表示されます (現在のコードは次のとおりです: =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(distance.url,"$1",C25),"$2",D25),"$3",travel.mode),"$k",bingmaps.key)
これにより、セル C31 に応答が生成されます。つまり、生の出力 (WebService が現在使用されている場所) です。コードは次のとおりです: =WEBSERVICE(C29) これにより、セル C32 にステータス コード (つまり 200) が生成されます (=FILTERXML(C31,"//StatusCode[1]" が現在使用されている場所)
=FILTERXML(C31,"//TravelDistance[1]") は、セル C34 で使用され、C31 からの移動距離を取得します。 =FILTERXML(C31,"//TravelDuration[1]") は、セル C35 で使用され、C31 からの所要時間を分単位で表示します。
ありがとう。
答え1
ああ、古いバージョンの Excel でこれを確実に実装するよりも、古いクライアントをアップグレードする方が簡単かもしれません。数年前に VBA で IE オブジェクトを使用したことを思い出します。あまり安定していませんでしたが、そのときは http get 呼び出しだけでなくサイト全体をロードしていました。
さらに詳しい情報については、こちらをご覧ください。https://stackoverflow.com/questions/3521876/excel-2010 で vba コードを使用して Web サービスを呼び出す
最近私が使用したより簡単なハックは、Web データを Web データ ソースとして Excel に直接取り込むことでした (データ > Web から)。Twitter フィードからの HTML 応答全体を空白のシートに直接ダンプし、検索とルックアップの式を使用して必要なデータの行と列を検索しました。データの更新後に「テキストを列に」ウィザードを自動的に実行することもできたことを思い出してください。これはすべて VBA なしで実行されたため、xlsm ファイルは必要なく、マクロを有効にすることを恐れる人もいません。
Ps. 今、同じシートを現在のコンピューター (Windows 10、Office 2016) と古いコンピューター (Windows 7、Office 2010 または 13?) で開こうとしました。ブラウザーで JavaScript が無効になっているというエラーが表示されます (これは内部的にはまだ Internet Explorer オブジェクトであり、Edge ではないと想定しています)。