Hướng dẫn

IMPORTDATA & IMPORTXML Google Sheets: Lấy Dữ Liệu Từ Web Tự Động [2026]

Tuân HoangTuân Hoang
9 tháng 6, 2026
8 phút đọc
Ảnh minh họa bài viết: IMPORTDATA & IMPORTXML Google Sheets: Lấy Dữ Liệu Từ Web Tự Động [2026]

Giới Thiệu: Google Sheets Có Thể Tự Động Lấy Dữ Liệu Từ Web

Bạn muốn theo dõi tỷ giá USD/VND cập nhật mỗi ngày mà không phải nhập tay? Hay tự động kéo giá vàng SJC, tin tức mới nhất, hoặc giá sản phẩm từ một website bán hàng vào bảng tính của mình? Google Sheets đã có sẵn công cụ để làm điều đó — hoàn toàn miễn phí, không cần code, không cần addon.

Bài viết này hướng dẫn bạn sử dụng 4 hàm IMPORT trong Google Sheets, tập trung vào IMPORTDATAIMPORTXML — hai hàm mạnh nhất để lấy dữ liệu từ web một cách tự động.

4 Hàm IMPORT Trong Google Sheets

Google Sheets cung cấp 4 hàm IMPORT khác nhau, mỗi hàm phục vụ một loại nguồn dữ liệu:

Hàm Dùng để lấy Độ khó Phù hợp nhất
IMPORTDATA File CSV/TSV từ URL Dễ Dữ liệu cấu trúc, API trả về CSV
IMPORTXML Bất kỳ element HTML/XML nào Trung bình Scraping web, giá cả, tỷ giá
IMPORTFEED RSS/Atom feed Dễ Tin tức, blog, cập nhật nội dung
IMPORTRANGE Dữ liệu từ Google Sheets khác Dễ Chia sẻ dữ liệu giữa nhiều Sheets

Bài này tập trung vào IMPORTDATAIMPORTXML — hai hàm phổ biến nhất để lấy dữ liệu từ web bên ngoài.

IMPORTDATA — Lấy CSV/TSV Từ URL

Cú pháp

=IMPORTDATA("URL")

URL phải trỏ đến một file trả về định dạng text/csv hoặc text/tsv. Dữ liệu sẽ được tự động điền vào nhiều ô liên tiếp, không cần thêm tham số nào khác.

Ví dụ 1: Lấy Dữ Liệu Tỷ Giá

Nhiều ngân hàng và tổ chức tài chính cung cấp API miễn phí trả về CSV. Ví dụ với dịch vụ tỷ giá công khai:

=IMPORTDATA("https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json")

Với các nguồn CSV thuần túy, chỉ cần nhét URL vào là xong. Dữ liệu sẽ tự động điền vào các ô.

Ví dụ 2: Dữ Liệu Thống Kê Công Khai

Nhiều tổ chức chính phủ và tổ chức quốc tế cung cấp dữ liệu dạng CSV công khai. Ví dụ World Bank Open Data:

=IMPORTDATA("https://api.worldbank.org/v2/country/VN/indicator/NY.GDP.MKTP.CD?format=csv")

Ví dụ 3: Giá Crypto Từ CoinGecko

CoinGecko cung cấp API miễn phí cho dữ liệu crypto:

=IMPORTDATA("https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&ids=bitcoin,ethereum&order=market_cap_desc&per_page=10&page=1&sparkline=false&x_cg_demo_api_key=YOUR_KEY")

Lưu ý: IMPORTDATA thường hoạt động tốt nhất với các URL trả về thuần CSV không có header phức tạp. Với JSON, bạn sẽ cần IMPORTXML hoặc Apps Script.

Tự Động Refresh

Google Sheets tự động refresh dữ liệu từ IMPORTDATA khoảng mỗi giờ. Để refresh ngay lập tức, nhấn Ctrl+Shift+F5 (hoặc mở menu File > Settings > Calculation).

IMPORTXML — Linh Hoạt Nhất, Lấy Bất Kỳ Element HTML

Cú pháp

=IMPORTXML("URL", "XPath_query")

IMPORTXML mạnh hơn IMPORTDATA nhiều vì nó có thể đọc bất kỳ website nào và trích xuất đúng phần bạn cần thông qua XPath — một ngôn ngữ truy vấn để định vị element trong HTML/XML.

XPath Cơ Bản — Những Gì Bạn Cần Biết

XPath Ý nghĩa
//title Lấy thẻ <title> của trang
//h1 Lấy tất cả thẻ <h1>
//h1[1] Lấy thẻ <h1> đầu tiên
//table[@id='price-table']//td Lấy tất cả <td> trong table có id="price-table"
//span[@class='price'] Lấy tất cả <span> có class="price"
//meta[@name='description']/@content Lấy giá trị thuộc tính content của meta description
//a/@href Lấy tất cả giá trị href (URL) trong thẻ <a>
//*[@class='price'] Lấy bất kỳ element nào có class="price"

8 Ví Dụ Thực Tế Có Thể Copy-Paste Ngay

Ví dụ 1: Lấy Tiêu Đề Website

Kiểm tra tiêu đề trang của bất kỳ website nào — hữu ích khi làm SEO audit:

=IMPORTXML("https://sheet.com.vn","//title")

Ví dụ 2: Lấy Meta Description

Kiểm tra meta description của một trang — tiết kiệm thời gian khi audit nhiều URL:

=IMPORTXML("https://sheet.com.vn/blog","//meta[@name='description']/@content")

Kết hợp với danh sách URL trong cột A, bạn có thể audit meta description của hàng trăm trang chỉ trong vài phút.

Ví dụ 3: Lấy Tỷ Giá USD/VND Từ Vietcombank

Theo dõi tỷ giá ngân hàng trực tiếp trong bảng tính:

=IMPORTXML("https://www.vietcombank.com.vn/exchangeRate","//td[@class='sell']")

Lưu ý: XPath chính xác phụ thuộc vào cấu trúc HTML hiện tại của website. Nếu website thay đổi giao diện, XPath có thể cần cập nhật. Hãy dùng Chrome DevTools để kiểm tra lại khi gặp lỗi.

Ví dụ 4: Theo Dõi Giá Sản Phẩm E-commerce

Theo dõi giá đối thủ cạnh tranh hoặc sản phẩm của chính bạn:

=IMPORTXML("https://tiki.vn/san-pham/url-san-pham.html","//span[@class='price-and-icon__price']")

Tạo một bảng với nhiều URL sản phẩm, dùng công thức tham chiếu ô để tự động hóa:

=IMPORTXML(A2,"//span[@class='price-and-icon__price']")

Ví dụ 5: Lấy Giá Vàng SJC

Theo dõi giá vàng mỗi ngày mà không cần vào website:

=IMPORTXML("https://sjc.com.vn/","//table[contains(@class,'gia')]//td")

Kết quả sẽ trả về một mảng dữ liệu từ bảng giá. Dùng thêm hàm INDEX() để lấy đúng ô bạn cần.

Ví dụ 6: Đếm Số Sản Phẩm Trong Category

Theo dõi số lượng sản phẩm trên một trang danh mục để phân tích đối thủ:

=COUNTA(IMPORTXML("https://shopurl.com/category","//div[@class='product-item']"))

Kết hợp COUNTA và IMPORTXML để đếm số lượng element — không cần scraping tool phức tạp.

Ví dụ 7: Lấy Tất Cả Link Trong Một Trang

Hữu ích cho link audit và SEO — lấy tất cả internal/external link:

=IMPORTXML("https://example.com","//a/@href")

Kết quả sẽ được đổ vào nhiều ô theo chiều dọc. Bạn có thể lọc, sắp xếp như dữ liệu thông thường.

Ví dụ 8: Lấy Tất Cả Thẻ H2 Của Một Bài Viết

Phân tích cấu trúc heading của bài viết đối thủ để nghiên cứu SEO:

=IMPORTXML("https://example.com/blog/bai-viet","//h2")

Nhanh chóng nắm được outline bài viết mà không cần đọc toàn bộ nội dung.

IMPORTFEED — Lấy Dữ Liệu RSS/Atom

Đây là hàm chuyên biệt để đọc RSS và Atom feed — định dạng chuẩn mà hầu hết các báo điện tử và blog cung cấp.

Cú pháp

=IMPORTFEED("URL_feed", [query], [headers], [số_mục])

Ví dụ: Lấy 10 Tin Tức Mới Nhất Từ VnExpress

=IMPORTFEED("https://vnexpress.net/rss/tin-moi-nhat.rss","items title",FALSE,10)

Tham số query có thể là:

  • "items title" — tiêu đề bài viết
  • "items url" — link bài viết
  • "items summary" — tóm tắt nội dung
  • "items created" — ngày đăng
  • "items author" — tác giả

Ứng Dụng Thực Tế Với IMPORTFEED

Tạo bảng tổng hợp tin tức từ nhiều nguồn vào một sheet:

=IMPORTFEED("https://tuoitre.vn/rss/tin-moi-nhat.rss","items title",FALSE,5)
=IMPORTFEED("https://thanhnien.vn/rss/home.rss","items url",FALSE,5)

Kết hợp HYPERLINK để tạo danh sách tin tức có thể click:

=HYPERLINK(IMPORTFEED(A1,"items url",FALSE,1),IMPORTFEED(A1,"items title",FALSE,1))

Lỗi Thường Gặp Và Cách Sửa

Lỗi Nguyên nhân Cách sửa
#N/A URL không truy cập được hoặc XPath sai Kiểm tra URL trực tiếp trên browser, test XPath bằng DevTools Console: $x("//xpath")
#ERROR! Quá nhiều kết quả trả về, hoặc kết quả vượt giới hạn ô Thêm [1] vào cuối XPath để lấy kết quả đầu tiên: //span[@class='price'][1]
Ô hiển thị "Loading..." Sheets đang fetch dữ liệu từ server Đợi 30-60 giây. Không spam refresh — sẽ không nhanh hơn.
Kết quả cũ, không cập nhật Cache chưa hết hạn Nhấn Ctrl+Shift+F5 để force refresh, hoặc tạm thời xóa rồi nhập lại công thức
Dữ liệu đúng hôm qua, sai hôm nay Website đã thay đổi cấu trúc HTML Vào website, dùng DevTools inspect element, tìm lại XPath mới
Bị block, luôn báo #N/A Website chặn request từ Google Sheets (Cloudflare, bot protection) Dùng Apps Script với UrlFetchApp thay thế — có thể giả lập user-agent

Giới Hạn Quan Trọng Cần Biết Trước

1. Không Hoạt Động Với Single Page Application (SPA)

Đây là giới hạn lớn nhất. Nếu website xây dựng bằng React, Vue, Angular, hay Next.js với client-side rendering — Google Sheets sẽ không lấy được nội dung. Lý do: Sheets chỉ tải HTML tĩnh, không chạy JavaScript. Nội dung SPA được render bởi JS sau khi load, nên Sheets sẽ nhận được trang rỗng hoặc chỉ có skeleton HTML.

Cách kiểm tra: Tắt JavaScript trong browser (DevTools → Settings → Disable JavaScript) rồi load lại trang. Nếu nội dung biến mất — đó là SPA, IMPORTXML sẽ không hoạt động.

2. Nhiều Website Chặn Request Từ Google

Các website lớn thường dùng Cloudflare hoặc các giải pháp chống bot. Họ nhận biết request từ Google Sheets và trả về trang lỗi hoặc CAPTCHA thay vì nội dung thật. Điều này không có giải pháp trong Sheets thuần — cần Apps Script.

3. Giới Hạn Số Lần Fetch

Google không công bố giới hạn chính xác, nhưng nếu có quá nhiều hàm IMPORT trong một sheet hoặc fetch quá thường xuyên, bạn sẽ gặp lỗi tạm thời. Sheets thường cache kết quả 30 phút đến 6 giờ.

4. Chỉ Lấy Được Nội Dung Public

IMPORTXML không thể đăng nhập vào website. Mọi nội dung sau login, sau paywall, hay cần xác thực đều không lấy được. Để truy cập nội dung cần auth, bắt buộc phải dùng Apps Script.

Khi Nào Nên Dùng Apps Script Thay Vì IMPORTXML

IMPORTXML rất tiện nhưng có những tình huống nó không đáp ứng được. Dưới đây là cách phân biệt:

Tình huống Dùng IMPORTXML Dùng Apps Script
Website tĩnh (HTML thuần) Không cần
Website SPA (React/Vue) Không Cần (Puppeteer hoặc headless browser)
Cần đăng nhập Không Cần (lưu cookie/session)
Website có Cloudflare Thường không Cần (giả lập user-agent)
Xử lý dữ liệu phức tạp Giới hạn Linh hoạt hơn nhiều
Cần cache kết quả Không tự cài được Có (dùng CacheService)
Kéo dữ liệu theo lịch Tự động mỗi giờ Linh hoạt hơn (Triggers)

Mẹo Thực Tế Khi Làm Việc Với XPath

Cách Tìm XPath Đúng Chỉ Trong 30 Giây

  1. Mở trang web cần lấy dữ liệu trong Chrome.
  2. Chuột phải vào element bạn muốn lấy → chọn Inspect.
  3. Trong DevTools, chuột phải vào dòng HTML được highlight → Copy → Copy XPath.
  4. Paste XPath đó vào công thức IMPORTXML của bạn.

Hoặc test XPath trực tiếp trong Console của DevTools bằng lệnh:

$x("//span[@class='price']")

Nếu Console trả về mảng phần tử, XPath của bạn đúng.

Đơn Giản Hóa XPath

XPath tự động copy từ DevTools thường rất dài và dễ vỡ khi website thay đổi layout. Hãy rút gọn về dạng đơn giản hơn:

// XPath đầy đủ (dễ vỡ):
/html/body/div[3]/div[2]/section/div[1]/span[2]

// XPath đơn giản hơn (bền hơn):
//span[@class='product-price']

XPath dựa trên class hoặc id bền hơn XPath dựa trên vị trí (div[3]/div[2]...) vì vị trí thay đổi khi website cập nhật layout.

Kết Hợp Với Các Hàm Khác

IMPORTXML trả về một mảng dữ liệu. Bạn có thể kết hợp với các hàm khác để xử lý tiếp:

// Lấy phần tử đầu tiên từ mảng
=INDEX(IMPORTXML("https://example.com","//h2"),1)

// Đếm số kết quả
=COUNTA(IMPORTXML("https://example.com","//li[@class='item']"))

// Lấy và làm sạch text
=TRIM(IMPORTXML("https://example.com","//span[@class='price']"))

Ví Dụ Kết Hợp: Bảng Theo Dõi Giá Sản Phẩm Tự Động

Đây là cách xây dựng bảng theo dõi giá đối thủ hoàn chỉnh:

  1. Cột A: Tên sản phẩm (nhập tay)
  2. Cột B: URL trang sản phẩm (nhập tay)
  3. Cột C: Giá hiện tại → =IMPORTXML(B2,"//span[@class='price']")
  4. Cột D: Ngày kiểm tra → =TODAY()
  5. Cột E: So sánh với hôm qua → =C2-C2_yesterday

Kết quả: một bảng dashboard theo dõi giá cập nhật tự động mỗi khi mở file, không cần tool nào khác.

Kết Luận

IMPORTDATAIMPORTXML là hai công cụ mạnh mà nhiều người dùng Google Sheets bỏ qua vì không biết đến. Chỉ với vài dòng công thức, bạn đã có thể:

  • Tự động cập nhật tỷ giá, giá vàng, giá crypto mỗi ngày
  • Theo dõi giá sản phẩm đối thủ mà không cần vào website thủ công
  • Kéo dữ liệu RSS, tin tức mới nhất vào bảng tổng hợp
  • Audit hàng trăm URL về meta title, description chỉ trong vài phút

Điểm quan trọng nhất cần nhớ: hàm này chỉ hoạt động với website tĩnh và nội dung public. Với website SPA hoặc cần login, hãy chuyển sang Apps Script. Và khi gặp lỗi XPath, hãy dùng Chrome DevTools để kiểm tra và tìm XPath mới — đó là kỹ năng quan trọng nhất khi làm việc với IMPORTXML.

Bắt đầu với ví dụ đơn giản nhất: thử =IMPORTXML("https://sheet.com.vn","//title") ngay bây giờ để làm quen với cú pháp, rồi dần áp dụng vào dữ liệu thực tế của bạn.

Nguồn tham khảo: IMPORTXML — Google Docs Editors Help | IMPORTDATA — Google Docs Editors Help | IMPORTFEED — Google Docs Editors Help

Chia sẻ bài viết:

Tuân Hoang

Tuân Hoang

Đội ngũ SheetStore

Google SheetsGoogle Apps ScriptCRMAutomationPhần mềm quản lý doanh nghiệp

Google Workspace Certified, 5+ years experience

Bạn thấy bài viết hữu ích?

Đăng ký nhận thông báo khi có bài viết mới.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận