使用二维码将值输入 Google 表格?
Using QR Code to enter value into Google Form?
我在 Google 表格 上有一个表格,用于记录访客进入我们地段的情况。进入所需的数据之一是通行证号码,它以 QR 码的形式发给访客。有没有什么方法可以不用手动输入通行证号码,而是扫描二维码,然后将通行证号码输入表格?
我知道可以使用以下脚本在表格中执行此操作:
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]);
因此,我希望这里是否有人知道表单的脚本应该是什么样子。
当您访问部署为网络应用程序的 Apps 脚本的 URL 时,您可以使用 ?
将参数传递到脚本中的 doGet(e)
函数中发布网络应用时提供的URL后的参数:
https://script.google.com/.../exec?passNo=21480&qNumber=1
被doGet()
函数取入的e
变量是一个事件对象,包含了事件的相关信息。 You can acess the parameters from the URL using e.parameters
:
function doGet(e){
Logger.log(e.parameters);
}
将在日志中显示 {qNumber=[1], passNo=[21480]}
。可以提取这些参数然后使用FormApp
的FormApp
library of Apps Script, you can create a new response to the form and submit it programmatically with the createResponse().withItemResponse(ItemResponse)
方法,使用从url参数中取出的pass number和question number:
Code.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',网络应用程序将 return 相应的页面取决于Response 创建和提交是否成功:
Success.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
Success
</body>
</html>
Failure.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
Failure
</body>
</html>
现在您需要做的就是生成一个二维码,以您脚本的URL和相关参数作为定位器。请确保您的二维码中的pNumber
参数始终设置为您要提交的问题编号,并且passNo=
后面的编号URL是你要扫码输入的pass号
我在 Google 表格 上有一个表格,用于记录访客进入我们地段的情况。进入所需的数据之一是通行证号码,它以 QR 码的形式发给访客。有没有什么方法可以不用手动输入通行证号码,而是扫描二维码,然后将通行证号码输入表格?
我知道可以使用以下脚本在表格中执行此操作:
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]);
因此,我希望这里是否有人知道表单的脚本应该是什么样子。
当您访问部署为网络应用程序的 Apps 脚本的 URL 时,您可以使用 ?
将参数传递到脚本中的 doGet(e)
函数中发布网络应用时提供的URL后的参数:
https://script.google.com/.../exec?passNo=21480&qNumber=1
被doGet()
函数取入的e
变量是一个事件对象,包含了事件的相关信息。 You can acess the parameters from the URL using e.parameters
:
function doGet(e){
Logger.log(e.parameters);
}
将在日志中显示 {qNumber=[1], passNo=[21480]}
。可以提取这些参数然后使用FormApp
的FormApp
library of Apps Script, you can create a new response to the form and submit it programmatically with the createResponse().withItemResponse(ItemResponse)
方法,使用从url参数中取出的pass number和question number:
Code.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',网络应用程序将 return 相应的页面取决于Response 创建和提交是否成功:
Success.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
Success
</body>
</html>
Failure.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
Failure
</body>
</html>
现在您需要做的就是生成一个二维码,以您脚本的URL和相关参数作为定位器。请确保您的二维码中的pNumber
参数始终设置为您要提交的问题编号,并且passNo=
后面的编号URL是你要扫码输入的pass号