Bản Đồ Lâm NghiệpGIS · Lâm nghiệp Việt Nam

Join bảng Excel, CSV vào lớp bản đồ để cập nhật dữ liệu

Nối bảng Excel, CSV vào lớp lô rừng trong QGIS theo mã lô: chuẩn bị file, tạo join, kiểm tra lô không khớp và ghi cố định dữ liệu vào bản đồ.

Admin 13/11/2026 6 phút đọc
Hộp Layer Properties của lớp Bando, tab Joins, nút dấu cộng ở góc dưới bên trái để thêm join mớiQGIS

Số liệu ngoài thực địa thường về văn phòng dưới dạng file Excel: kết quả xác minh từng lô, danh sách hộ nhận khoán, tiền chi trả dịch vụ môi trường rừng theo lô. Gõ lại từng con số vào bảng thuộc tính thì chậm và dễ nhầm dòng. Nối bảng (join) trong QGIS gắn cả bảng Excel vào lớp bản đồ theo một cột chung — mã lô, mã chủ rừng — chỉ trong vài cú nhấp, không gõ lại chữ nào.

Đây là bài 4 trong series Thuộc tính, truy vấn và thống kê dữ liệu lâm nghiệp trong QGIS.

Nguyên tắc: phải có cột chung

Join ghép dòng Excel với lô trên bản đồ khi giá trị ở cột chung giống hệt nhau. Ví dụ lớp lô rừng có cột TT (số thứ tự lô), file Excel kết quả xác minh cũng có cột TT — lô số 125 trên bản đồ sẽ nhận đúng dòng số 125 trong Excel.

Cột chung tốt nhất là mã duy nhất cho mỗi lô. Nếu không có sẵn, ghép từ tiểu khu, khoảnh, lô:

Chuẩn bị file Excel

  • Một dòng tiêu đề duy nhất ở dòng 1, mỗi cột một tên ngắn, không dấu, không cách.
  • Không gộp ô, không dòng tổng cộng, không dòng trống xen giữa.
  • Cột mã cùng kiểu với cột mã trên bản đồ: bản đồ lưu số thì Excel cũng là số; bản đồ lưu chữ ('0125') thì Excel cũng phải là chữ, giữ nguyên số 0 đầu.
  • Lưu dạng .xlsx, hoặc CSV với bảng mã UTF-8 để giữ tiếng Việt.

Bước 1: mở bảng Excel trong QGIS

Kéo thả file .xlsx vào cửa sổ QGIS (hoặc Layer ▸ Add Layer ▸ Add Vector Layer…). Nếu file có nhiều sheet, QGIS hỏi chọn sheet nào. Bảng hiện trong Layers Panel với biểu tượng bảng — không có hình trên bản đồ, chỉ có thuộc tính.

Cách mở Excel chi tiết, kể cả khi file có tọa độ XY, có trong bài Tạo điểm từ Excel/CSV có tọa độ XY trong QGIS.

Bước 2: tạo join

  1. Nhấp phải lớp bản đồ cần nhận dữ liệu ▸ Properties…
  2. Chọn tab Joins ở cột bên trái.
  3. Bấm nút + (Add new join) ở góc dưới.

Hộp Layer Properties của lớp Bando, tab Joins, nút dấu cộng ở góc dưới bên trái để thêm join mới

Hộp Layer Properties của lớp Bando, tab Joins, nút dấu cộng ở góc dưới bên trái để thêm join mới

  1. Trong hộp Add Vector Join:
  • Join layer: bảng Excel vừa mở.
  • Join field: cột chung trong Excel.
  • Target field: cột chung trên lớp bản đồ.
  1. Bấm OK, rồi OK lần nữa để đóng Properties.

Hộp Add Vector Join: Join layer là bảng XacMinh, Join field và Target field đều là cột TT, tích Cache join layer in memory

Hộp Add Vector Join: Join layer là bảng XacMinh, Join field và Target field đều là cột TT, tích Cache join layer in memory

Mở bảng thuộc tính lớp bản đồ: cuối bảng có thêm các cột của Excel, tên cột được thêm tiền tố là tên bảng (ví dụ XacMinh_ketqua).

Các tuỳ chọn nên biết

  • Joined fields: tích vào rồi chỉ chọn những cột Excel cần lấy — bảng gọn hơn nhiều.
  • Custom field name prefix: đổi hoặc xoá tiền tố tên cột. Xoá hẳn tiền tố thì tên cột có thể trùng với cột sẵn có — cẩn thận.
  • Cache join layer in memory: để mặc định (tích) cho nhanh.
  • Editable join layer: cho sửa giá trị Excel ngay trong bảng thuộc tính lớp bản đồ. Ít khi cần.

Bước 3: kiểm tra lô nào không khớp

Lô không tìm được dòng tương ứng trong Excel sẽ có các cột join trống (NULL). Để đếm nhanh, chọn bằng biểu thức trên một cột vừa join, ví dụ:

"XacMinh_ketqua" IS NULL

Rồi xem các lô được chọn có thật sự không có trong danh sách Excel, hay do mã gõ lệch (thừa dấu cách, thiếu số 0 đầu, khác kiểu số với chữ).

Bước 4: biến join thành dữ liệu thật

Join chỉ là liên kết tạm: cột Excel hiện trong bảng nhưng chưa ghi vào file bản đồ. Gỡ Excel ra, hoặc gửi riêng file .shp cho người khác, các cột đó biến mất. Hai cách cố định lại:

Cách A — ghi vào cột có sẵn của lớp: bật chỉnh sửa, mở Field Calculator, chọn Update existing field là cột cần cập nhật (ví dụ churung), biểu thức là cột vừa join ("DSChuRung_ten"). Thêm coalesce để lô không khớp giữ giá trị cũ:

coalesce("DSChuRung_ten", "churung")

Cách B — xuất ra lớp mới: nhấp phải lớp ▸ Export ▸ Save Features As… File mới chứa luôn các cột join như cột thật.

Xong việc thì vào lại tab Joins, chọn join và bấm nút − để gỡ.

Lưu ý quan trọng: Join trong QGIS là một – một. Nếu Excel có hai dòng cùng mã, lô chỉ nhận dòng đầu tiên mà không báo gì. Trước khi join, kiểm tra cột mã trong Excel không trùng (Excel: Data ▸ Remove Duplicates để tìm, đừng xoá vội).

Cách khác: công cụ Join attributes by field value

Trong Processing Toolbox, gõ join, chọn Join attributes by field value. Công cụ tạo luôn một lớp mới đã ghép xong, và trong nhật ký chạy ghi rõ có bao nhiêu đối tượng không ghép được — tiện để kiểm tra. Tích Discard records which could not be joined nếu chỉ muốn giữ các lô có trong Excel.

Lỗi thường gặp

  • Cột join toàn NULL: chọn nhầm Join field / Target field, hoặc hai cột khác kiểu (một bên chữ, một bên số). Đổi kiểu một bên cho khớp, ví dụ tạo cột mới bằng to_int("TT") hoặc to_string("TT").
  • Một số lô khớp, một số không: mã có dấu cách thừa. Trong Excel dùng hàm TRIM, trong QGIS dùng trim("ma").
  • Chữ tiếng Việt từ CSV bị lỗi: CSV không phải UTF-8. Mở lại trong Excel, Save As ▸ CSV UTF-8.
  • Sửa file Excel mà QGIS không nhận số mới: đóng file trong Excel, rồi nhấp phải bảng trong QGIS ▸ gỡ và mở lại.

Câu hỏi thường gặp

Join có làm thay đổi file Excel không? Không. Excel chỉ được đọc, trừ khi bạn tích Editable join layer và sửa giá trị.

Không có cột chung mà chỉ có vị trí thì sao? Khi hai lớp bản đồ chồng lên nhau, ghép theo vị trí thay cho ghép theo mã — nội dung bài kế tiếp.

Bài tiếp theo

Bài 5: Cập nhật thuộc tính từ lớp khác bằng join không gian — lấy tên xã, tiểu khu cho từng lô dựa vào vị trí trên bản đồ.

―――

Bài viết biên soạn lại từ tài liệu tập huấn "Ứng dụng QGIS trong quản lý tài nguyên rừng" – Dự án Quản lý rừng bền vững và Bảo tồn đa dạng sinh học (VFBC/USAID), Quảng Trị 2024. Tác giả: Vũ Văn Thái.

Bài liên quan