
我在 Excel 2016 中建立了一個 Excel 電子表格,它使用 WebService 和 FilterXML 公式與 Bing 的 API 互動並從中拖曳回資料。這些公式在 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]" 的位置)
然後在儲存格C34 中使用=FILTERXML(C31,"//TravelDistance[1]") 來取得從C31 開始的行駛距離=FILTERXML(C31,"//TravelDuration[1]") 然後在儲存格C35 中使用來顯示從 C31 開始的持續時間(以分鐘為單位)
謝謝。
答案1
噢,天哪,我想升級舊客戶端可能比嘗試在舊版本的 Excel 中可靠地實現這一點更容易。我記得幾年前在VBA中使用過IE物件。不是很穩定,但後來我加載了整個網站,而不僅僅是 http get 呼叫。
請查看此處以獲取一些更深入的資訊。https://stackoverflow.com/questions/3521876/calling-web-service-using-vba-code-in-excel-2010
我最近採用的一個更簡單的方法是將 Web 資料直接拉入 Excel 作為 Web 資料來源(「資料」>「來自 Web」)。我將 Twitter 提要中的整個 html 回應直接轉儲到一張空白表中,然後使用搜尋和尋找公式來尋找我想要的資料行和列。我想回憶一下,我甚至可以在資料刷新後自動運行“文字到列”精靈。這一切都是在沒有 VBA 的情況下完成的,因此不需要 xlsm 文件,也不需要人們害怕啟用巨集。
詩。我現在嘗試在當前電腦(Windows 10、Office 2016)與舊電腦(Windows 7、Office 2010 或 13?)上開啟同一張工作表。它抱怨瀏覽器中禁用了 javascript(我認為瀏覽器內部仍然是一個 Internet Explorer 物件而不是 Edge)。