Tạo Mã QR Code Tự Động Trong Google Sheets Bằng Công Thức (2026)
Mục lục:
- 1. Vì sao Google Sheets không có hàm QR code riêng
- 2. Công thức tạo QR code cơ bản bằng IMAGE và API Google Chart
- 3. Dùng API thay thế khi Google Chart API không ổn định
- 4. Tạo hàng loạt QR code với ARRAYFORMULA
- 5. Ứng dụng thực tế: mã QR cho sản phẩm, vé, thanh toán
- 6. Lọc và tổng hợp dữ liệu trước khi tạo QR hàng loạt
- 7. Xử lý các lỗi thường gặp khi tạo QR bằng công thức
- 8. Khi nào nên dùng công thức, khi nào cần giải pháp nâng cao hơn
- 9. Câu hỏi thường gặp
Google Sheets không có hàm QR code sẵn có như QRCODE() trong Excel. Nhưng bạn có thể tạo mã QR tự động hoàn toàn bằng công thức IMAGE() kết hợp API tạo QR miễn phí — không cần Apps Script, không cần add-on. Bài này hướng dẫn chi tiết cách làm, các lỗi thường gặp, và khi nào bạn cần chuyển sang giải pháp nâng cao hơn.
Vì sao Google Sheets không có hàm QR code riêng
Google Sheets thiếu hàm QRCODE() tích hợp vì việc render mã QR đòi hỏi xử lý ảnh (rasterize dữ liệu thành ma trận điểm đen-trắng theo chuẩn ISO/IEC 18004) — vượt quá phạm vi một hàm tính toán thông thường. Thay vào đó, Google cung cấp hàm IMAGE(), cho phép nhúng bất kỳ ảnh nào từ URL vào ô — kể cả ảnh QR được sinh động bởi một API bên ngoài.
Cách tiếp cận phổ biến nhất: gửi nội dung cần mã hóa (link, số điện thoại, thông tin sản phẩm...) tới một dịch vụ tạo QR qua URL, dịch vụ trả về ảnh PNG, rồi dùng IMAGE() để hiển thị ảnh đó ngay trong ô tính. Toàn bộ quá trình chạy tự động — thay đổi dữ liệu nguồn, mã QR cập nhật theo.
Công thức tạo QR code cơ bản bằng IMAGE và API Google Chart
Google Chart API (dù đã deprecated cho biểu đồ, nhưng phần tạo QR vẫn hoạt động ổn định tính đến 2026) là lựa chọn quen thuộc nhất vì miễn phí, không cần đăng ký key:
=IMAGE("https://chart.googleapis.com/chart?chs=200x200&cht=qr&chl=" & ENCODEURL(A2))
Giải thích từng phần:
- chs=200x200: kích thước ảnh QR (200x200 pixel), có thể chỉnh 100x100 đến 500x500
- cht=qr: loại chart là QR code
- chl=: nội dung cần mã hóa, lấy từ ô A2
- ENCODEURL(): bắt buộc phải bọc nội dung bằng hàm này để mã hóa ký tự đặc biệt (dấu cách, tiếng Việt có dấu, ký tự &) thành định dạng URL hợp lệ — thiếu bước này QR sẽ lỗi hoặc trống
Ví dụ thực tế: ô A2 chứa "https://sheet.com.vn/mau/quan-ly-kho", công thức tại B2 sẽ tự động render mã QR dẫn thẳng tới link đó. Kéo công thức xuống hàng trăm dòng, bạn có cả bảng mã QR cho toàn bộ danh mục sản phẩm chỉ trong vài giây.
Vì sao ENCODEURL không thể bỏ qua
Đây là lỗi phổ biến nhất khi mới làm quen: nội dung tiếng Việt có dấu như "Áo thun nam size L" nếu không được ENCODEURL sẽ bị cắt cụt hoặc API trả về ảnh lỗi. ENCODEURL chuyển "Áo thun" thành chuỗi %C3%81o%20thun — định dạng mà server API hiểu đúng. Với số điện thoại hoặc mã sản phẩm thuần số, thiếu ENCODEURL vẫn chạy được, nhưng cứ giữ thói quen bọc luôn để tránh lỗi khi dữ liệu thay đổi.
Dùng API thay thế khi Google Chart API không ổn định
Google Chart API tuy miễn phí nhưng là dịch vụ legacy, Google từng thông báo ngừng hỗ trợ nhiều lần (dù phần QR vẫn sống dai). Nếu bạn cần độ ổn định cao hơn cho hệ thống vận hành thật (in tem QR, vé sự kiện, mã theo dõi đơn hàng), nên cân nhắc các API chuyên dụng:
| Dịch vụ | Công thức mẫu | Giới hạn miễn phí | Ưu điểm |
|---|---|---|---|
| QR Server (goqr.me) | =IMAGE("https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=" & ENCODEURL(A2)) |
Không giới hạn rõ ràng, dùng cho traffic vừa phải | Không cần key, hỗ trợ tùy chỉnh màu, logo |
| QuickChart | =IMAGE("https://quickchart.io/qr?text=" & ENCODEURL(A2) & "&size=200") |
Free tier ~50 request/giây, đủ cho hầu hết sheet | Ổn định, hỗ trợ style nâng cao (rounded, dark mode) |
| Google Chart API | =IMAGE("https://chart.googleapis.com/chart?chs=200x200&cht=qr&chl=" & ENCODEURL(A2)) |
Không công bố rate limit | Quen thuộc, nhiều template cũ vẫn dùng |
Với các sheet quản lý vận hành thực tế (ví dụ bảng theo dõi đơn hàng cần in mã QR để nhân viên kho quét), khuyến nghị dùng QuickChart hoặc QR Server thay vì Google Chart API — vì hai dịch vụ này được duy trì tích cực hơn và có tài liệu rõ ràng về rate limit.
Tạo hàng loạt QR code với ARRAYFORMULA
Copy công thức xuống từng dòng thủ công là cách làm chậm và dễ sót khi dữ liệu có hàng trăm dòng. Kết hợp ARRAYFORMULA cho phép sinh toàn bộ cột QR chỉ với một công thức duy nhất:
=ARRAYFORMULA(IF(A2:A500="","",IMAGE("https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=" & ENCODEURL(A2:A500))))
Điều kiện IF(A2:A500="","",...) rất quan trọng — nếu không có điều kiện này, các ô trống trong vùng A2:A500 sẽ khiến API nhận request rỗng và trả về ảnh lỗi hoặc icon "broken image" tràn xuống cả những dòng chưa có dữ liệu.
Lưu ý về hiệu năng: mỗi ô IMAGE() là một request HTTP riêng biệt tới server bên ngoài. Với 500 dòng, Sheets sẽ gửi 500 request khi mở file — có thể khiến trang tải chậm vài giây. Nếu bảng của bạn thường xuyên vượt 300-500 dòng QR cùng lúc, nên cân nhắc chỉ render QR theo yêu cầu (dùng công thức trong ô riêng khi cần xem/in, thay vì để cả cột luôn hiển thị). Kỹ thuật lồng điều kiện và xử lý mảng này cùng gốc với các pattern trong ARRAYFORMULA & LAMBDA: Xử Lý Dữ Liệu Hàng Loạt Không Cần VBA, đáng tham khảo nếu bạn muốn tối ưu thêm cho tập dữ liệu lớn.
Ứng dụng thực tế: mã QR cho sản phẩm, vé, thanh toán
QR chứa thông tin sản phẩm để quét kiểm kho
Kết hợp mã SKU với tên sản phẩm trong một chuỗi, rồi mã hóa QR để nhân viên kho quét bằng điện thoại là xem ngay thông tin:
=IMAGE("https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=" & ENCODEURL("SKU:" & A2 & " | " & B2 & " | Ton kho:" & C2))
Cách này phù hợp cho các bảng quản lý kho xây trên Google Sheets — không cần app riêng, chỉ cần app quét QR bất kỳ trên điện thoại là đọc được nội dung.
QR dẫn tới link thanh toán hoặc form đặt hàng
Nếu bạn có link thanh toán VietQR hoặc link Google Form thu thập đơn hàng, việc mã hóa trực tiếp URL đó thành QR giúp khách hàng quét bằng camera điện thoại là vào thẳng trang, không cần gõ tay:
=IMAGE("https://api.qrserver.com/v1/create-qr-code/?size=250x250&data=" & ENCODEURL("https://forms.gle/xxxxx?order=" & A2))
Đây cũng là kỹ thuật hay dùng khi bạn xây form thu thập dữ liệu ngay trên Sheets — nếu chưa quen cách dựng form tự động đổ dữ liệu về Sheets, có thể tham khảo thêm Cách Tạo Form Nhập Liệu Tự Động Trên Google Sheets (Không Cần Code) để ghép QR + form thành một luồng thu thập đơn hàng khép kín.
QR vé sự kiện có mã định danh riêng
Với vé sự kiện, mỗi vé cần một mã QR riêng biệt để tránh trùng lặp khi check-in. Dùng hàm sinh mã ngẫu nhiên kết hợp số thứ tự dòng:
=IMAGE("https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=" & ENCODEURL("TICKET-" & ROW() & "-" & A2))
Trong đó A2 có thể là mã email hoặc số điện thoại người mua vé, đảm bảo mỗi QR là duy nhất và có thể tra cứu ngược lại khi đối chiếu danh sách check-in.
Lọc và tổng hợp dữ liệu trước khi tạo QR hàng loạt
Trong thực tế, bạn hiếm khi tạo QR cho toàn bộ dữ liệu thô — thường cần lọc trước (chỉ lấy đơn hàng "Đã xác nhận", chỉ lấy sản phẩm còn hàng...) rồi mới sinh QR cho tập đã lọc. Kết hợp QUERY để lọc dữ liệu, sau đó ARRAYFORMULA + IMAGE để render QR cho kết quả lọc là pattern hiệu quả:
=ARRAYFORMULA(IMAGE("https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=" & ENCODEURL(QUERY(A2:C500,"select B where C='Đã xác nhận'"))))
Nếu bạn cần dựng cả một dashboard theo dõi (số lượng QR đã tạo, đơn hàng đã quét, tỷ lệ check-in), việc nắm vững QUERY kết hợp ARRAYFORMULA và IMPORTRANGE sẽ giúp mở rộng hệ thống dễ dàng hơn — tham khảo Kết Hợp QUERY, ARRAYFORMULA Và IMPORTRANGE: Xây Dashboard Tự Động Trên Google Sheets 2026 để thấy toàn cảnh cách các hàm này phối hợp trong một dashboard thật.
Xử lý các lỗi thường gặp khi tạo QR bằng công thức
Ảnh QR không hiển thị, chỉ thấy icon vỡ ảnh
Nguyên nhân phổ biến nhất: nội dung nguồn chứa ký tự & hoặc # chưa qua ENCODEURL, khiến URL bị cắt giữa chừng. Kiểm tra bằng cách copy URL đầy đủ (paste công thức concat riêng ra một ô rồi xem giá trị text) và dán thẳng vào trình duyệt — nếu trình duyệt cũng không load được ảnh, lỗi nằm ở phía API, không phải ở Sheets.
QR hiển thị nhưng chậm hoặc load timeout
Nếu sheet có quá nhiều công thức IMAGE() cùng lúc (trên 200-300), Google Sheets phải gửi từng đó request HTTP song song, dễ bị nghẽn hoặc một số ảnh không load kịp. Giải pháp: tách các mã QR ra một sheet phụ, chỉ tính toán khi cần (ví dụ dùng nút "Refresh" thủ công qua Apps Script đơn giản để chuyển công thức IMAGE thành ảnh tĩnh sau khi đã đúng dữ liệu).
QR sai nội dung dù công thức đúng
Thường do dữ liệu nguồn có khoảng trắng thừa ở đầu/cuối chuỗi (copy từ nguồn khác dán vào). Bọc thêm TRIM() quanh nội dung trước khi ENCODEURL để loại bỏ khoảng trắng dư: ENCODEURL(TRIM(A2)).
Muốn tải ảnh QR về máy hoặc in trực tiếp
Ảnh sinh ra bởi IMAGE() chỉ tồn tại dưới dạng link động trong ô, không tải trực tiếp bằng chuột phải như ảnh thường được. Để tải về, mở URL đầy đủ (copy từ công thức) trong trình duyệt rồi lưu ảnh, hoặc dùng Apps Script để tự động xuất hàng loạt ảnh QR ra Google Drive dưới dạng file PNG riêng — phù hợp khi cần in tem nhãn số lượng lớn.
Khi nào nên dùng công thức, khi nào cần giải pháp nâng cao hơn
Công thức IMAGE() + API phù hợp cho phần lớn nhu cầu: bảng vài trăm dòng, cập nhật thủ công, không cần độ chính xác tuyệt đối 100% uptime. Nhưng nếu hệ thống của bạn cần:
- Sinh QR cho hàng nghìn bản ghi đồng thời không giật lag
- Đảm bảo QR luôn tồn tại kể cả khi API bên thứ ba sập
- Tự động xuất QR ra file PDF/ảnh riêng để gửi email hoặc in tem
- Gắn logo thương hiệu vào giữa mã QR
...thì nên chuyển sang Apps Script (dùng thư viện QR code tạo ảnh cục bộ, không phụ thuộc API ngoài) hoặc dùng các mẫu quản lý dựng sẵn có tích hợp QR đã xử lý các trường hợp biên này. Với người dùng không rành code, các template quản lý bán hàng hoặc quản lý kho trên SheetStore đã tích hợp sẵn luồng sinh QR ổn định, tránh phải tự mò từng lỗi API như trên.
Nếu bạn đang mở rộng bảng tính để xử lý nhiều nguồn dữ liệu cùng lúc (nhiều sheet, nhiều file), việc nắm các hàm nâng cao như IMPORTRANGE, LAMBDA sẽ giúp kết hợp QR code với luồng dữ liệu phức tạp hơn — có thể tham khảo thêm tại Hàm Google Sheets Nâng Cao 2027: Làm Chủ QUERY, ARRAYFORMULA, IMPORTRANGE & LAMBDA.
Câu hỏi thường gặp
Làm sao để tạo mã QR code trong Google Sheets mà không cần cài thêm add-on?
Bạn dùng hàm IMAGE() kết hợp với API tạo QR miễn phí (ví dụ QR Server), truyền dữ liệu ô cần mã hóa vào URL API. Sheets sẽ tự render ảnh QR ngay trong ô mà không cần cài đặt thêm bất kỳ add-on nào.
Có thể tạo QR code hàng loạt cho danh sách sản phẩm không?
Hoàn toàn được. Chỉ cần viết công thức IMAGE() cho ô đầu tiên rồi kéo xuống toàn bộ danh sách, mỗi dòng dữ liệu sẽ tự sinh ra một mã QR riêng tương ứng với nội dung của dòng đó.
Mã QR tạo bằng công thức này có tải về hoặc in được không?
Có thể chụp màn hình, xuất PDF hoặc dùng script tải ảnh trực tiếp từ URL API để in nhãn, tem sản phẩm. Với nhu cầu in số lượng lớn, nên kết hợp thêm Apps Script để tự động xuất ảnh.
Công thức QR code này có hoạt động trên điện thoại không?
Có, vì đây là công thức chuẩn của Google Sheets nên hoạt động trên mọi thiết bị có ứng dụng Sheets, kể cả điện thoại và máy tính bảng, miễn là có kết nối internet để gọi API.
Bài viết liên quan:
Bạn muốn áp dụng ngay mà không phải tự xây từ đầu?
Khám phá các mẫu Google Sheets và phần mềm quản lý dựng sẵn cho doanh nghiệp Việt tại SheetStore Marketplace.
📚 Bài Viết Liên Quan
- Template Google Sheets Quan Ly Mua Hang va Nha Cung Cap 2027: Toi Uu Chi Phi Procurement
- Xu Hướng Phần Mềm Quản Lý Bán Hàng 2027: AI, Tự Động Hóa và Omnichannel
- Template Google Sheets Quản Lý Nhân Sự: Tuyển Dụng và Onboarding 2027
- Tổng Kết 2027: Google Sheets và Phần Mềm Quản Lý Bán Hàng Tại Việt Nam
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
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.


