google-apps-script - 使用 QR 码在 Google 表单中输入值?
问题描述
我在Google 表单上有一个表格,用于记录访客进入我们的地段。进入所需的数据之一是通行证号码,它以二维码的形式交给访客。有什么方法可以代替手动输入通行证号,而是扫描二维码,通行证号将输入到表格中?
我知道可以使用以下脚本在表格中执行此操作:
function doGet(e){
var ss = SpreadsheetApp.openByUrl("sheet_url");
var sheet = ss.getSheetByName("sheet_name");
return insert(e,sheet);
}
function doPost(e){
var ss = SpreadsheetApp.openByUrl("sheet_url");
var sheet = ss.getSheetByName("sheet_name");
return insert(e,sheet);
}
function insert(e,sheet){
var scannedData = e.parameter.sdata;
var d = new Date();
var ctime = d.toLocaleString();
sheet.appendRow([scannedData,ctime]);
因此,我希望这里的任何人都知道脚本在表单中的外观。
解决方案
当您访问部署为 Web 应用程序的 Apps 脚本的 URL时,您可以使用发布 Web 应用程序时提供的 URL 后面的参数将参数传递到doGet(e)
脚本中的函数:?
https://script.google.com/.../exec?passNo=21480&qNumber=1
该函数e
接收的变量doGet()
是一个事件对象,其中包含有关事件的信息。您可以使用以下方式从 URL 访问参数e.parameters
:
function doGet(e){
Logger.log(e.parameters);
}
将显示 {qNumber=[1], passNo=[21480]}
在日志中。可以提取这些参数,然后使用Apps 脚本库,您可以使用从 url 参数中获取的通行证编号和问题编号,使用的方法FormApp
创建对表单的新响应并以编程方式提交:createResponse().withItemResponse(ItemResponse)
FormApp
代码.gs:
function doGet(e){
try {
var passNo = e.parameters.passNo;
var qNumber = e.parameters.qNumber;
var form = FormApp.openById('your-form-id-here');
var items = form.getItems();
// assuming question 1 is the pass number question
var q = items[qNumber[0] - 1].asTextItem();
var itemResponse = q.createResponse(passNo[0])
var FormResponse = form.createResponse();
FormResponse.withItemResponse(itemResponse);
FormResponse.submit();
return HtmlService.createHtmlOutputFromFile('Success')
}
catch(e){
return HtmlService.createHtmlOutputFromFile('Failure');
}
}
我还在HTML
项目中创建了两个文件,简称为“Success.html”和“Failure.html”,Web 应用程序将根据响应创建和提交是否成功返回相应的页面:
成功.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
Success
</body>
</html>
失败.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
Failure
</body>
</html>
现在您需要做的就是生成一个二维码,其中包含脚本的 URL 和相关参数作为定位器。确保您pNumber
的二维码参数始终设置为您要提交的问题的编号,passNo=
并且URL中的数字是您要扫描和输入的通行证编号。
推荐阅读
- javascript - 如何将组件(产品)添加到另一个组件(购物车)?
- google-colaboratory - Google colab:YOLOv4-tiny-Darknet-Roboflow 的列车中的问题
- oracle - 如何在 Oracle Apex 应用程序的所有页面中显示一个区域?
- kotlin - 如何创建具有原始列表的每隔一个元素的代理列表?
- java - Appium grid org.openqa.selenium.WebDriverException: 转发新会话时出错找不到
- vue.js - 通过 konva 绘制形状以显示在画布中
- python - 列表列表中的常见项目
- javascript - 无法设置自定义 Web 组件的高度
- python - 如何将张量流 EagerTensors 列表转换为 numpy 数组
- javascript - Laravel Echo Listener 无法在前端工作