好的,Google Sheet 產生 QR Code… 怎麼做?
今天來聊聊 Google Sheet 產生 QR Code。最近剛好在弄一個活動報名的東西,要大量產生帶有不同網址的 QR Code,一個一個做真的會瘋掉。所以就研究了一下怎麼在 Google Sheet 裡面直接搞定。這篇算是我的筆記,整理一下找到的方法。
其實核心概念很簡單,就是讓 Google Sheet 去 call 一個能產生 QR Code 圖片的服務,然後把圖片顯示在儲存格裡。方法有好幾種,從最簡單的公式到需要寫一點點程式碼的都有。下面會一個一個講。
先說結論:三種方法快速比較
時間有限的人直接看這個表。簡單講,沒特殊需求用方法一最快,但有失效風險。要穩定、功能多就用附加元件,但可能要錢或有隱私顧慮。懂一點程式碼、想完全客製化就用方法三,最強大也最麻煩。
| 比較項目 | 方法一:IMAGE 函數 | 方法二:附加元件 (Add-on) | 方法三:Google Apps Script |
|---|---|---|---|
| 上手難度 | 超簡單,就一個公式。 | 也很簡單,點幾下就裝好了,有圖形介面。 | 需要懂一點點 JavaScript 程式碼,比較複雜。 |
| 客製化程度 | 很低。頂多改改圖片大小。 | 看元件功能。有些可以改顏色、加 Logo,通常要付費版。 | 最高。你想得到的都能做,例如結合 Gmail 自動寄出。 |
| 穩定性 | 有風險。因為用的 Google Chart API 其實已經被官方標記為「已過時」(deprecated)。 雖然還能用,但不知道哪天會關掉。 | 相對穩定,畢竟是上架到市集的產品,有專人維護。 | 自己寫的程式碼自己負責,只要 API 沒問題就沒問題。可以串接更穩定的第三方 QR Code API。 |
| 成本 | 免費。 | 通常有免費版,但功能受限。進階功能,比如大量生成或客製化,常常要收費。 | 免費(除非你串接的第三方 API 要收費)。 |
| 最大優點 | 快!公式複製貼上,一拉就全部產生完畢。 | 方便,不用寫程式,功能整合得很好,適合非技術人員。 | 完全自動化與客製化。可以做到「當 A 欄填入資料,B 欄就自動產生 QR Code 並存到雲端硬碟」。 |
| 最大缺點 | API 已過時,說不定哪天就不能用了。 真的,很多論壇都在討論這個。 | 需要授權。安裝時會要求讀取你的試算表、甚至雲端硬碟的權限,有資安跟隱私的考量。 | 有學習曲線,要花時間看文件、除錯。 |
方法一:最簡單的 IMAGE 函數法
這個方法是最多教學文章在講的,因為真的太簡單了。 核心就是用 IMAGE() 這個函數,去抓 Google Chart API 產生的 QR Code 圖片。
假設你的網址資料放在 A2 儲存格,那你就在 B2 儲存格貼上這個公式:
=IMAGE("https://chart.googleapis.com/chart?chs=200x200&cht=qr&chl=" & ENCODEURL(A2))
稍微解釋一下:
IMAGE(): Google Sheet 內建函數,用途就是把一個圖片網址變成儲存格裡的圖片。"https://chart.googleapis.com/chart?...": 這就是產生圖片的 API 網址。chs=200x200: 指的是 QR Code 圖片的大小,可以自己改成 150x150 或 300x300。cht=qr: 告訴 API 我們要產生的圖表類型是 QR Code。chl=: 這後面要接的就是你想變成 QR Code 的內容,通常是網址。& ENCODEURL(A2): 這邊是重點。&用來串接字串,把 A2 的內容接到chl=後面。ENCODEURL()則是為了把網址裡的特殊字元(例如空格或中文字)轉換成瀏覽器看得懂的格式,避免出錯。
不過呢,就像前面表格說的,這個 Google Chart API 其實官方已經不推薦使用了。 在很多開發者社群,像 Drupal 或 Stack Overflow,都有人回報說這個 API 有時候會失效或回傳 404 錯誤。 雖然目前大部分情況下還能動,但如果你是要用在很重要的商業用途,可能就要考慮一下這個風險。
方法二:功能最完整的附加元件 (Add-on)
如果你不想碰公式,也不想寫程式,那用附加元件 (Add-on) 是最無腦的選擇。直接去 Google Workspace Marketplace 搜尋 "QR Code Generator" 就會找到一堆。
優點很明顯:
- 圖形化介面:通常會有個側邊欄,讓你用點選的方式設定 QR Code 的內容、大小、顏色,甚至上傳 Logo。
- 批次處理:可以一次選取多個儲存格,然後一次產生所有 QR Code。有些還能直接幫你把圖片存成 PNG 檔到 Google Drive。
- 額外功能:有些進階的服務,像是 QR TIGER,提供的是「動態 QR Code」。 意思就是 QR Code 產生後,你還能隨時更改它導向的網址,甚至設定密碼保護、追蹤掃描次數等,這是一般靜態 QR Code 做不到的。
但天下沒有白吃的午餐。缺點也很實際:
- 費用:免費版通常只能產生少量或是有浮水印。要解鎖完整功能,像是高解析度、無限制生成、客製化外觀,通常都需要付費訂閱。
- 隱私與權限:這是我自己比較在意的點。安裝附加元件時,它會要求你授權存取你的 Google Sheets 檔案,有的甚至會要求「查看、編輯、建立和刪除您所有的 Google 文件」或是「在您不使用時執行」。 這等於是把家裡的鑰匙交給別人。雖然大部分知名廠商都有隱私政策,但在歐美對 GDPR 這類法規比較敏感的環境,大家會更小心。反過來說,在台灣,使用者可能比較習慣直接按「同意」,但如果你的試算表裡有客戶資料或敏感數據,用附加元件前真的要三思,仔細看一下它要求的權限範圍。
方法三:最強大的 Google Apps Script 自動化
最後這個方法,是給喜歡折騰、追求極致自動化的人。Google Apps Script (GAS) 是一個用 JavaScript 為基礎的腳本語言,可以讓你直接在 Google Workspace 的各種應用(包含 Sheets)裡寫程式,擴充功能。
用 GAS 產生 QR Code 的好處是彈性最大。你可以寫一個自訂函數,例如叫做 generateQR(data),用起來就跟內建函數一樣。 而且,你可以不依賴那個已過時的 Google Chart API,改串接其他更穩定、功能更強的第三方 QR Code API,例如 apyhub, QuickChart 等。
下面是一個簡單的實作步驟:
- 打開指令碼編輯器:在你的 Google Sheet 檔案中,點選「擴充功能」>「Apps Script」。
- 貼上程式碼:把下面的程式碼複製貼到編輯器裡,然後儲存專案。這段程式碼定義了一個叫做
QRCODE的自訂函數。
/**
* 產生 QR Code 的自訂函數
* @param {string} data 要編碼成 QR Code 的資料.
* @param {number} size 圖片大小 (像素).
* @return The image formula.
* @customfunction
*/
function QRCODE(data, size = 200) {
if (!data) {
return "請提供資料";
}
const qrApiUrl = "https://chart.googleapis.com/chart?";
const params = {
cht: "qr",
chs: `${size}x${size}`,
chl: encodeURIComponent(data),
choe: "UTF-8"
};
const url = qrApiUrl + Object.keys(params)
.map(key => `${key}=${params[key]}`)
.join('&');
return `IMAGE("${url}", 4, size, size)`;
}
- 回到試算表使用:現在你可以在儲存格裡像用 SUM 或 VLOOKUP 一樣使用它了。假設資料在 A2,就在 B2 輸入:
=QRCODE(A2)或=QRCODE(A2, 150)來指定大小。
這只是最基本的。進階一點,你可以結合觸發器 (Triggers),做到:
- 當我在 A 欄填入新網址時,B 欄就「自動」產生 QR Code,完全不用手動拉公式。
- 當 QR Code 產生後,自動把這個 Code 透過 Gmail 發送給指定的人。
- 將產生的 QR Code 圖片檔案,自動儲存到 Google Drive 的特定資料夾。
你看,這完全就是一個客製化的自動化工作流程了。雖然一開始設定比較麻煩,但一次搞定,長久下來可以省下非常多時間。
實際應用場景與變體
所以,學會這個到底能幹嘛?其實應用場景蠻廣的。
- 庫存管理:為每個商品產生一個獨立的 QR Code,貼在商品上。掃一下就能連到試算表裡的該商品資料列,快速查看庫存、規格。
- 活動報到:就像我一開始的需求,把報名者的專屬報到網址變成 QR Code,寄給他們。現場用手機或平板掃一下,就能連結到 Google 表單自動完成報到。
- 設備巡檢:把 QR Code 貼在每台機器設備上,巡檢人員掃了之後,直接開啟回報表單,填寫設備狀況。
- 製作 vCard (電子名片):把你的聯絡資訊 (姓名、電話、Email) 用特定格式的文字串起來,再產生 QR Code。別人一掃就能直接把你的聯絡方式存到手機通訊錄。
常見錯誤與修正
在操作過程中,你可能會遇到一些問題。這裡列幾個我踩過的坑。
- 公式出現 `#ERROR!` 或 `#N/A`:
- 檢查網址:最常見的原因是你的
chl=後面接的內容有問題。確認一下你的資料來源儲存格 (例如 A2) 不是空的。 - 檢查
ENCODEURL:如果你的網址包含&或?等特殊字元,而且你忘了用ENCODEURL()包起來,API 可能會解析錯誤。
- 檢查網址:最常見的原因是你的
- 圖片顯示「您需要授權才能查看此圖片」:
- 這是 Google 為了安全起見的提示。 當你第一次在試算表中使用 IMAGE 函數連結到外部服務時,它會跳出來。通常儲存格上方會有一個藍色的「允許存取」按鈕,點一下就好了。
- Apps Script 自訂函數沒反應:
- 名稱錯誤:確定你在儲存格輸入的函數名稱,跟你 Apps Script 裡
function後面寫的名稱一模一樣,大小寫要完全符合。 - 忘記儲存:在 Apps Script 編輯器裡修改完程式碼後,一定要按上面的「儲存專案」圖示。
- 權限問題:第一次執行自訂函數時,系統可能會跳出一個授權請求視窗,問你是否同意這個指令碼執行。你必須點選「審查權限」並「允許」,函數才能正常運作。
- 名稱錯誤:確定你在儲存格輸入的函數名稱,跟你 Apps Script 裡
你的場景,適合哪一種方法?
好了,說了這麼多,其實沒有最好的方法,只有最適合你的方法。我想這篇文章應該把各種方法的優缺點都講清楚了。
現在換你思考看看:你需要在 Google Sheet 裡產生 QR Code 是為了什麼?是一次性的報告,還是需要長期、大量、自動化的流程?你對處理資料的隱私有多在意?留言分享一下你的使用場景,以及你覺得哪種方法最適合你吧!
