用 Apps Script 从 Google 表格批量生成动态二维码
要从 Google 表格生成动态二维码,每行放一个链接和你自己的业务编号,把一段简短的 Apps Script 粘贴到表格里,把 API 令牌存进脚本属性,然后从菜单运行。脚本会把这些行每 100 行一批发送给 QR Maker REST API,再把每一行的短链接写回表格。再次运行时只会补全还空着的行,所以永远不会重复创建。
什么时候适合用这个方法
大多数产品清单、桌位安排和活动跟踪表本来就放在电子表格里。如果团队里有人手动维护这份清单,从同一张表生成二维码,就能让清单和二维码保持同步,不需要开发人员参与。典型场景有:给每个产品 SKU 做一个用在包装上的码,给每张桌子或每个房间做一个码,或者同一个活动给每个销售代表、每个门店各做一个码。
如果你需要在自己的应用里生成二维码,就改从你的服务器调用 API。这部分见 REST API 教程。
准备工作
- QR Maker 的 Business 版套餐和一个 API 令牌。在「设置」的「API 令牌」里创建。它以
qrs_开头,只显示一次。 - 一张 Google 表格,第 1 行是表头,列依次为:A
external_id、Btarget_url、Cname(可选)、Dshort_link(留空)、Estatus(留空)。
external_id 是你给这一行定的编号:SKU、桌号、销售代表编码等。它在你的账户内必须唯一,可以包含字母、数字、点、下划线、冒号和连字符。
第 1 步:添加脚本
打开表格,依次选择「扩展程序」(Extensions)→「Apps 脚本」(Apps Script),删掉占位代码,粘贴 google-sheets.gs 的内容,然后保存项目。
第 2 步:安全地保存令牌
在 Apps Script 编辑器里打开「项目设置」(Project Settings),滚动到「脚本属性」(Script properties),添加一个名为 QR_TOKEN 的属性,值填你的令牌。
不要把令牌粘贴到单元格里。能打开这张表的人都能读到单元格内容,而任何拿到令牌的人都能在你的账户里创建、修改和删除二维码。脚本属性只有能编辑脚本的人才看得到。
第 3 步:运行
刷新表格,会出现一个新的「QR Maker」菜单。选择「Create codes for new rows」(为新行创建二维码)。第一次运行时,Google 会请你授权脚本编辑表格并调用外部服务。
对每一行有编号、有链接但还没有短链接的数据,脚本会创建一个动态码并填好 D 列。E 列会显示 created(已创建);如果之前已经用这个编号建过码,显示 already existed(已存在);如果这一行被拒绝,则显示错误码:链接不是有效的 http 或 https 地址时是 INVALID_TARGET_URL,目的地被安全检查拒绝时(比如链接到另一个短网址服务)是以 URL_BLOCKED_ 开头的错误码。
第 4 步:获取图片
D 列的短链接,就是印刷出来的码必须编码的内容。至于图片本身,有两种方式:
- 从 QR Maker 的工作台里把每个码下载为 SVG,在那里还能套用你的配色和 Logo。
- 通过 API 调用
GET /v1/qrcodes/by-external-id/{external_id}?include=svg获取,返回的码在data.svg里带有 SVG 文本。Python 示例会为每一行保存一个 SVG,几百个码时用它更快。
之后修改目的地
修改 B 列再运行一次脚本,并不会改动已有的码。这是有意设计的:用已知编号发送一个不同链接的 POST 请求,会返回冲突,而不是悄悄改掉一个可能已经印刷出去的码的跳转。要改目的地,请在工作台里改,或者调用 PATCH /v1/qrcodes/by-external-id/{external_id} 并传入新的 target_url。
需要注意的限制
每次运行每个请求最多发送 100 行,每成功一行计一次调用,计入 Business 版每月包含的 50,000 次。失败的行不计数。Apps Script 本身每次运行约 6 分钟后会停止,足够处理几千行;更多的话,再运行一次,它会从停下的地方继续。
常见问题
这样做需要服务器吗?
不需要。Apps Script 运行在 Google 的服务器上,所以令牌永远不会到达浏览器。这也是为什么尽管 API 不接受网页发起的调用,这个方法依然可行。
只有查看权限的同事能看到我的令牌吗?
不能。脚本属性只有能编辑脚本项目的人才看得到。查看者和评论者打不开它们。
如果我删掉一行会怎样?
码不会受任何影响。删除一行只是把它从表格里去掉。如果这个码应该停用,请在工作台里或通过 API 把它停用或删除。