我反複分析了從 Internet 將數據導入 Excel 並隨後自動更新的方法。 尤其是:
- 在舊版本的 Excel 2007-2013 中,這可以通過直接 Web 請求來完成。
- 從 2010 年開始,可以使用 Power Query 加載項非常方便地完成此操作。
對於最新版本的 Microsoft Excel 中的這些方法,您現在可以添加另一種方法 - 使用內置函數以 XML 格式從 Internet 導入數據。
XML(可擴展標記語言 = 可擴展標記語言)是一種通用語言,旨在描述任何類型的數據。 事實上,它是純文本,只是添加了特殊的標籤來標記數據結構。 許多站點以 XML 格式提供免費的數據流供任何人下載。 特別是在我國中央銀行的網站(www.cbr.ru)上,在類似技術的幫助下,提供了各種貨幣的匯率數據。 您可以從莫斯科交易所網站 (www.moex.com) 以同樣的方式下載股票、債券和許多其他有用信息的報價。
從 2013 版開始,Excel 有兩個函數可以直接將來自 Internet 的 XML 數據加載到工作表單元格中: 網絡服務 (網絡服務) и 過濾器.XML (過濾器XML). 它們成對工作——首先是功能 網絡服務 向所需站點執行請求並以 XML 格式返回其響應,然後使用函數 過濾器.XML 我們將這個答案“解析”成組件,從中提取我們需要的數據。
讓我們用一個經典的例子來看看這些函數的操作——從我們國家中央銀行的網站導入我們在給定日期間隔內需要的任何貨幣的匯率。 我們將使用以下結構作為空白:
這裡:
- 黃色單元格包含我們感興趣的時期的開始和結束日期。
- 藍色的有一個使用命令的貨幣下拉列表 數據 - 驗證 - 列表 (數據——驗證——列表).
- 在綠色單元格中,我們將使用我們的函數創建一個查詢字符串並獲取服務器的響應。
- 右邊的表格是對貨幣代碼的引用(稍後我們將需要它)。
我們走吧!
步驟 1. 形成查詢字符串
要從該站點獲取所需的信息,您需要正確地詢問它。 我們去 www.cbr.ru 並打開主頁頁腳中的鏈接' 技術資源'- 使用 XML 獲取數據 (http://cbr.ru/development/SXML/)。 我們向下滾動一點,在第二個示例(示例 2)中將有我們需要的內容 - 獲取給定日期間隔的匯率:
從示例中可以看出,查詢字符串必須包含開始日期 (日期_req1) 和結尾 (日期_req2) 我們感興趣的時期和貨幣代碼 (VAL_NM_RQ),我們想要得到的比率。 您可以在下表中找到主要貨幣代碼:
貨幣 | 推薦碼 | | 貨幣 | 推薦碼 |
澳元兌美元 | R01010 | 立陶宛立特 | R01435 | |
奧地利先令 | R01015 | 立陶宛優惠券 | R01435 | |
阿塞拜疆馬納特 | R01020 | 摩爾多瓦列伊 | R01500 | |
英鎊 | R01035 | РќРµРјРµС † РєР ° СЏ РјР ° СЂРєР ° | R01510 | |
安哥拉新寬扎 | R01040 | 荷蘭盾 | R01523 | |
亞美尼亞德拉姆 | R01060 | 挪威克朗 | R01535 | |
白俄羅斯盧布 | R01090 | 波蘭茲羅提 | R01565 | |
比利時法郎 | R01095 | 葡萄牙埃斯庫多 | R01570 | |
保加利亞獅子 | R01100 | 羅馬尼亞列伊 | R01585 | |
巴西雷亞爾 | R01115 | 新加坡元 | R01625 | |
匈牙利福林 | R01135 | 蘇里南元 | R01665 | |
港元 | R01200 | 塔吉克索莫尼 | R01670 | |
希臘德拉克馬 | R01205 | 塔吉克盧布 | R01670 | |
丹麥克朗 | R01215 | 土耳其里拉 | R01700 | |
美元 | R01235 | 土庫曼馬納特 | R01710 | |
歐元 | R01239 | 新土庫曼馬納特 | R01710 | |
印度盧比 | R01270 | 烏茲別克斯坦 | R01717 | |
愛爾蘭鎊 | R01305 | 烏克蘭格里夫納 | R01720 | |
冰島克朗 | R01310 | 烏克蘭 karbovanets | R01720 | |
西班牙比塞塔 | R01315 | 芬蘭馬克 | R01740 | |
意大利里拉 | R01325 | 法國法郎 | R01750 | |
哈薩克斯坦堅戈 | R01335 | 捷克克朗 | R01760 | |
加拿大元 | R01350 | 瑞典克朗 | R01770 | |
吉爾吉斯斯坦 | R01370 | 瑞士弗蘭克 | R01775 | |
中國人民幣 | R01375 | 愛沙尼亞克朗 | R01795 | |
科威特第納爾 | R01390 | 南斯拉夫新第納爾 | R01804 | |
拉脫維亞緯度 | R01405 | 南非蘭特 | R01810 | |
黎巴嫩鎊 | R01420 | 韓元 | R01815 | |
日圓 | R01820 |
中央銀行網站上還提供了完整的貨幣代碼指南 - 參見 http://cbr.ru/scripts/XML_val.asp?d=0
現在我們將在工作表上的單元格中形成一個查詢字符串:
- 將文本連接運算符 (&) 放在一起;
- 功能 VPR (VLOOKUP)在目錄中找到我們需要的幣種代碼;
- 功能 TEXT (文本),它通過斜杠根據給定的模式日-月-年轉換日期。
="http://cbr.ru/scripts/XML_dynamic.asp?date_req1="&ТЕКСТ(B2;"ДД/ММ/ГГГГ")& "&date_req2="&ТЕКСТ(B3;"ДД/ММ/ГГГГ")&"&VAL_NM_RQ="&ВПР(B4;M:N;2;0)
步驟 2. 執行請求
現在我們使用函數 網絡服務 (網絡服務) 將生成的查詢字符串作為唯一參數。 答案將是一長串 XML 代碼(如果您想完整查看,最好打開自動換行並增加單元格大小):
步驟 3. 解析答案
為了更容易理解響應數據的結構,最好使用在線 XML 解析器之一(例如,http://xpather.com/ 或 https://jsonformatter.org/xml-parser),它可以直觀地格式化 XML 代碼,為其添加縮進並用顏色突出顯示語法。 然後一切都會變得更加清晰:
現在您可以清楚地看到課程值是由我們的標籤框起來的
要提取它們,請在工作表上選擇一列包含 10 個(或更多——如果有邊距)空單元格(因為設置了 XNUMX 天的日期間隔),然後在公式欄中輸入函數 過濾器.XML (篩選XML):
在這裡,第一個參數是帶有服務器響應 (B8) 的單元格的鏈接,第二個參數是 XPath 中的查詢字符串,這是一種特殊的語言,可用於訪問必要的 XML 代碼片段並提取它們。 例如,您可以在此處閱讀有關 XPath 語言的更多信息。
重要的是輸入公式後不要按 Enter, 和鍵盤快捷鍵 按Ctrl+轉移+Enter,即以數組公式的形式輸入(其周圍的花括號將自動添加)。 如果您擁有支持 Excel 中的動態數組的最新版 Office 365,那麼一個簡單的 Enter,並且您不需要提前選擇空單元格 - 函數本身將根據需要獲取盡可能多的單元格。
為了提取日期,我們將執行相同的操作——我們將在相鄰列中選擇幾個空單元格並使用相同的函數,但使用不同的 XPath 查詢,從 Record 標籤中獲取 Date 屬性的所有值:
=FILTER.XML(B8;”//記錄/@Date”)
現在將來,當更改原始單元格 B2 和 B3 中的日期或在單元格 B3 的下拉列表中選擇不同的貨幣時,我們的查詢將自動更新,參考中央銀行服務器獲取新數據。 要手動強制更新,您還可以使用鍵盤快捷鍵 按Ctrl+其他+F9.
- 通過 Power Query 將比特幣匯率導入 Excel
- 在舊版 Excel 中從 Internet 導入匯率