本文介绍了通过电子邮件发送预先填好的Google表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个脚本,可以从电子表格中创建预填充的Google表单。我可以很容易地获得预填充的URL,并且按预期工作。我很难通过电子邮件发送预填表格。我可以使用 HtmlService
获取HTML输出并将其附加到电子邮件的正文,但它不是交互式的。我可以填写文本字段,但不能选择多个选项或提交表单。
脚本
//表单已经建立...
var logs = ss.getDataRange()。getValues ();
var formResponse = form.createResponse(); (var j = 0; j formItem = items [j + 2] .asTextItem();
。
response = formItem.createResponse(weekData [i] [j]);
formResponse.withItemResponse(response);
}
var url = formResponse.toPrefilledUrl();
//标记为已发送,因此不会在下一次触发中捕获
logs.getRange(i + 1,logs.getLastColumn())。setValue('sent');
var response = UrlFetchApp.fetch(url);
var htmlBody = HtmlService.createHtmlOutput(response).getContent();
MailApp.sendEmail({
至:[email protected],
主题:确认实习时间,
htmlBody:htmlBody
});
关于如何在电子邮件中将其作为功能表单发送的任何想法?如果最糟糕的是最差的,我可以包含一个缩短的链接,并让他们点击直播表单。 解决方案
只查找从电子邮件正文提交的表单中预填的多项选择回复 - 您可以为每个多项选择项创建一个预填充链接,将它们添加到html电子邮件中,然后使用电子邮件中的链接提交预填表单。
如果您还需要用户从电子邮件中填写输入文本字段,这可能需要更多的工作......但可能使用replace()。
函数emailForm(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var form = FormApp.openByUrl(ss.getFormUrl());
var items = form.getItems();
//或者您的Multiple Choice项目在列表中的任何位置
var choice_item = items [0] .asMultipleChoiceItem();
var choice_opts = choice_item.getChoices();
var prefilled_set = [];
var logs = ss.getDataRange()。getValues();
var formResponse = form.createResponse(); (var j = 0; j formItem = items [j + 2] .asTextItem();
。
response = formItem.createResponse(weekData [i] [j]);
formResponse.withItemResponse(response);
}
var url = formResponse.toPrefilledUrl();
//为每个多选选项创建一个预填充链接
choice_opts.forEach(function(e){
var choice_response = choice_item.createResponse(e.getValue());
formResponse.withItemResponse(choice_response);
var prefill_url = formResponse.toPrefilledUrl();
//将URI从视图更改为响应并缩短URL
var tiny_url = form.shortenFormUrl(
prefill_url.replace(/ viewform?,/ formResponse?));
//建立HTML链接
var html_link ='< a href = ''+ tiny_url +'>'+ e.getValue()+'< / a>';
//将每个选项链接推送到一个数组
prefilled_set.push( html_link);
});
var response = UrlFetchApp.fetch(url);
//获取您的HTML输出并添加多选择链接到它
var htmlBody = HtmlService.createHtmlOutput(response + prefilled_set.toString())
.getContent();
MailApp.sendEmail({
至:[email protected],
主题:确认实习时间,
htmlBody:htmlBody
});
}
这是预填充链接提交电子表格
prefill_url.replace(/ viewform?,/ formResponse? )
另外,可能要格式化以某种方式链接,使他们更加突出。甚至用您自己的
I have a script which creates a pre-filled Google Form from a spreadsheet. I can get the pre-filled URL easily enough and it's working as expected. I'm having a hard time sending the pre-filled form via email. I can get the HTML output using HtmlService
and appending it to the body of the email, but it isn't interactive. I can fill in text fields, but cannot select multiple choice items or submit the form.
Script
// A form is already built...
var logs = ss.getDataRange().getValues();
var formResponse = form.createResponse();
for(var j=0;j<7; j++) {
formItem = items[j+2].asTextItem();
response = formItem.createResponse(weekData[i][j]);
formResponse.withItemResponse(response);
}
var url = formResponse.toPrefilledUrl();
// Mark as sent so it isn't caught in the next trigger
logs.getRange(i+1, logs.getLastColumn()).setValue('sent');
var response = UrlFetchApp.fetch(url);
var htmlBody = HtmlService.createHtmlOutput(response).getContent();
MailApp.sendEmail({
to: "[email protected]",
subject: "Confirm Intern Hours",
htmlBody: htmlBody
});
Any ideas on how to send this as a functional form in an email? If worst comes to worst, I can include a shortened link and have them click out to the live form.
解决方案
If you are only looking for a pre-filled multiple choice reply to the form that is submitted from the email body - you can create a pre-filled link for each of the multiple choice items, add them to the html email, and then submit the pre-filled form using the link in the email.
If you also need the input text fields to be filled out by the user from the email, that would probably take a bit more work..but may be possible using replace().
function emailForm () {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var form = FormApp.openByUrl(ss.getFormUrl());
var items = form.getItems();
// or wherever your Multiple Choice item is in the list
var choice_item = items[0].asMultipleChoiceItem();
var choice_opts = choice_item.getChoices();
var prefilled_set = [];
var logs = ss.getDataRange().getValues();
var formResponse = form.createResponse();
for(var j=0;j<7; j++) {
formItem = items[j+2].asTextItem();
response = formItem.createResponse(weekData[i][j]);
formResponse.withItemResponse(response);
}
var url = formResponse.toPrefilledUrl();
// Create a prefilled link for each multiple choice option
choice_opts.forEach(function (e) {
var choice_response = choice_item.createResponse(e.getValue());
formResponse.withItemResponse(choice_response);
var prefill_url = formResponse.toPrefilledUrl();
// Change the URI from view to response and Shorten the URL
var tiny_url = form.shortenFormUrl(
prefill_url.replace("/viewform?", "/formResponse?"));
// Make HTML Link
var html_link = '<a href="' + tiny_url + '"> ' + e.getValue() + ' </a>';
// Push each option link into an array
prefilled_set.push(html_link);
});
var response = UrlFetchApp.fetch(url);
// Get your HTML Output and Add the Multiple Choice links to it
var htmlBody = HtmlService.createHtmlOutput(response + prefilled_set.toString())
.getContent();
MailApp.sendEmail({
to: "[email protected]",
subject: "Confirm Intern Hours",
htmlBody: htmlBody
});
}
This is the piece that makes the pre-filled links submit the form from email:
prefill_url.replace("/viewform?", "/formResponse?")
Also, will probably want to format the links in some way to make them stand out more. Or even replace response
with your own html template
这篇关于通过电子邮件发送预先填好的Google表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!