Google apps script 有没有可能';预填充&x27;使用谷歌电子表格中的数据的谷歌表单?
我正在寻找一种方法,用谷歌电子表格中的特定数据“预填充”谷歌表单。表单中每个人都有相同的“标准”问题,但前两个问题中的数据将“预先填充”来自现有谷歌电子表格的唯一数据。根据现有电子表格中的电子邮件地址,数据将是唯一的 源电子表格示例Google apps script 有没有可能';预填充&x27;使用谷歌电子表格中的数据的谷歌表单?,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我正在寻找一种方法,用谷歌电子表格中的特定数据“预填充”谷歌表单。表单中每个人都有相同的“标准”问题,但前两个问题中的数据将“预先填充”来自现有谷歌电子表格的唯一数据。根据现有电子表格中的电子邮件地址,数据将是唯一的 源电子表格示例 Col 1 Col 2 Col 3 电子邮件名称生日 @迈克·琼斯1975年5月9日 @吉姆·史密斯1985年4月19日 表格示例一 问题1-预先填入谷歌电子表格中的数据(Mike Jones) 问题2-预填数据(1975年5月9日),来自谷歌电子表格 问题3-
Col 1 Col 2 Col 3
电子邮件名称生日
@迈克·琼斯1975年5月9日
@吉姆·史密斯1985年4月19日
表格示例一 问题1-预先填入谷歌电子表格中的数据(Mike Jones) 问题2-预填数据(1975年5月9日),来自谷歌电子表格 问题3-空白(等待用户回复) 问题4-空白(等待用户回复)
表格示例二 问题1-预先填入谷歌电子表格中的数据(Jim Smith) 问题2-预先填入谷歌电子表格中的数据(1985年4月19日) 问题3-空白(等待用户回复) 问题4-空白(等待用户回复)
有人知道这是否可以做到吗?如果是,我们将非常感谢您的帮助或指导 提前谢谢你
Todd您可以在表单编辑器中创建预填充表单URL,如中所述。您将得到如下URL,例如:
https://docs.google.com/forms/d/--form-id--/viewform?entry.726721210=Mike+Jones&entry.787184751=1975-05-09&entry.1381372492&entry.960923899
buildURL()
在本例中,问题1“姓名”的ID为726721210
,而问题2“生日”的ID为787184751
。问题3和4是空白的
您可以通过将通过UI提供的URL修改为模板来生成预填充URL,如下所示:
函数buildUrls(){
变量模板=”https://docs.google.com/forms/d/--form-id--/viewform?entry.726721210=##Name##&entry.787184751=##Birthday##&entry.1381372492&entry.960923899";
var ss=SpreadsheetApp.getActive().getSheetByName(“Sheet1”);//电子邮件、姓名、生日
var data=ss.getDataRange().getValues();
//跳过标题,然后为Sheet1中的每一行构建URL。
对于(变量i=1;i
这是足够有效的-你可以通过电子邮件将预先填写的URL发送给每个人,他们已经填写了一些问题
BetterBuildURL()
我们可以通过编程将模板拼接在一起,而不是使用蛮力创建模板。这样做的好处是,我们可以重复使用代码,而无需记住更改模板
表格中的每个问题都是一个项目。对于本例,假设表单只有4个问题,如您所述。项目[0]
为“姓名”;[1]
为“生日”,依此类推
我们可以创建一个表单响应,我们不会提交它-相反,我们将部分完成表单,只获得预填充的表单URL。由于Forms API了解每个项的数据类型,因此我们可以避免操纵日期和其他类型的字符串格式,这在某种程度上简化了代码
(编辑:中有一个更通用的版本)
/**
*使用表单API生成预填充表单URL
*/
函数betterBuildUrls(){
var ss=SpreadsheetApp.getActive();
var sheet=ss.getSheetByName(“Sheet1”);
var data=ss.getDataRange().getValues();//预填充的数据
var formUrl=ss.getFormUrl();//使用附在工作表上的表单
var form=FormApp.openByUrl(formUrl);
var items=form.getItems();
//跳过标题,然后为Sheet1中的每一行构建URL。
对于(变量i=1;i
yymmdd函数 预填表单URL中的任何日期项应采用以下格式:
yyyy-mm-dd
。此帮助函数使用新方法扩展日期对象以处理转换
当从电子表格中读取日期时,只要数据的格式可以识别为日期,您将得到一个javascript日期对象。(您的示例无法识别,因此您可以使用5/9/1975
,而不是1975年5月9日
)
//来自http://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/
Date.prototype.yyyymmdd=函数(){
var yyyy=this.getFullYear().toString();
var mm=(this.getMonth()+1.toString();//getMonth()是基于零的
var dd=this.getDate().toString();
返回yyyy+'-'+(mm[1]?mm:“0”+mm[0])+'-'+(dd[1]?dd:“0”+dd[0]);
};
Mogsdad,谢谢您提供的信息。我的最终目标是让这个过程“自动化”。源电子表格通过谷歌表单更新。我希望二级表单自动“预先填充”一些数据,然后自动通过电子邮件发送到相关的电子邮件地址。使用上面的脚本可以吗?可以这样做,使用上面的脚本作为构建块。使用“表格a”的表格响应触发器生成预填写的