NguyenDang95
Senior Member
Xin chào mọi người. Trong bài viết này mình xin giới thiệu đến mọi người cách thức lấy dữ liệu từ trang web bất kỳ. Trong Excel, người dùng có thể sử dụng công cụ có sẵn Power Query để lấy dữ liệu từ một trang web bất kỳ, dữ liệu trả về thông thường là HTML (ở dạng bảng), XML hoặc JSON. Tuy vậy người dùng lại không thể tinh chỉnh những loại dữ liệu nào muốn nhận hoặc chỉ muốn dữ liệu theo nhiều tiêu chí khác nhau (tham số truy vấn (query parameters) của URL hoặc Request Body), lúc này VBA sẽ là lựa chọn hoàn hảo.
Chúng ta xét một ví dụ thực tế dưới đây.
Ví dụ: Lấy dữ liệu chứng khoán theo danh mục từ trang web iboard.ssi.com.vn:
Giả sử người dùng muốn lấy dữ liệu từ trang web iboard.ssi.com với những danh mục như VN100,VN30,VNCONS:
Để tìm được nguồn cung cấp dữ liệu cho bảng trên, chúng ta thực hiện những bước sau:
Người dùng có thể tìm thấy tệp Excel chứa macro VBA đính kèm theo bài viết này.
Cập nhật:
Alo các thím, tình hình là tệp Excel mẫu ở đầu bài viết không còn sử dụng được nữa do SSI đã thay đổi API, cho nên mình quyết định viết lại hoàn toàn dưới dạng VSTO add-in để mọi người có thể tiện sử dụng.
Bổ sung: Ngoài việc lấy/cập nhật dữ liệu theo cách thủ công trên, mọi người có thể lấy/cập nhật dữ liệu theo thời gian thực thông qua hàm RTD của Excel.
Mở tập tin Ssi-Rtd.xlsx và xem kết quả.
Mô phỏng:
Cập nhật: Bổ sung thêm nguồn dữ liệu cho hàm RTD cho phép lấy dữ liệu thời gian thực từ trang Fpts.
Chúng ta xét một ví dụ thực tế dưới đây.
Ví dụ: Lấy dữ liệu chứng khoán theo danh mục từ trang web iboard.ssi.com.vn:
Giả sử người dùng muốn lấy dữ liệu từ trang web iboard.ssi.com với những danh mục như VN100,VN30,VNCONS:
Để tìm được nguồn cung cấp dữ liệu cho bảng trên, chúng ta thực hiện những bước sau:
- Từ trình duyệt web nhân Chromium bất kỳ (Edge, Chrome, Opera, v.v.), người dù nhấn phím F12 để mở Developer Tools
- Tiếp theo, chọn tab Network - Fetch/XHR, từ đây người dùng có thể tìm được nguồn dữ liệu trên bắt nguồn từ API nào.
- Dựa vào thông tin của các tab Headers, Payload và Response, người dùng tiến hành viết macro VBA tạo yêu cầu HTTP (HTTP Request) và xử lý phản hồi (Response) nhận được để trình bày dữ liệu ra Excel
Người dùng có thể tìm thấy tệp Excel chứa macro VBA đính kèm theo bài viết này.
Cập nhật:
Alo các thím, tình hình là tệp Excel mẫu ở đầu bài viết không còn sử dụng được nữa do SSI đã thay đổi API, cho nên mình quyết định viết lại hoàn toàn dưới dạng VSTO add-in để mọi người có thể tiện sử dụng.
Bổ sung: Ngoài việc lấy/cập nhật dữ liệu theo cách thủ công trên, mọi người có thể lấy/cập nhật dữ liệu theo thời gian thực thông qua hàm RTD của Excel.
- Đầu tiên, mọi người tải tệp Ssi-Rtd.zip đính kèm theo bài viết này và tiến hành giải nén ra.
- Xác định các thím đang sử dụng phiên bản Excel 32 bit hay 64 bit, nếu 32 bit thì dùng thư mục x86, 64 bit thì dùng thư mục x64.
- Mở Start - Gõ "cmd" và nhấp chuột phải chọn Run as Administrator để mở trình nhắc lệnh Cmd với quyền quản trị viên.
- Tiến hành gõ lệnh như sau:
Mã:
x86:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe "đường dẫn đến tệp .dll" /tlb /codebase
x64:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe "đường dẫn đến tệp .dll" /tlb /codebase
Mô phỏng:
Tệp đính kèm
Sửa lần cuối: