Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 有没有可能';预填充&x27;使用谷歌电子表格中的数据的谷歌表单?_Google Apps Script_Google Sheets_Google Forms - Fatal编程技术网

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”的表格响应触发器生成预填写的