Google apps script 动态更改窗体中的图像文件
我希望有人能帮助我,我现在所做的是否正确。 我需要有一个单一的形式进行在线问题(只有一个问题的形式)在我的谷歌网站。表单有用户、电子邮件、问题Id、图像(图像基本上就是问题)、多选答案。由于问题太多,我宁愿只保留一个表格来获得答案。 我计划向每个用户共享(仅查看)电子表格,每个用户都有每个测试的URL。 我的问题是,当用户单击共享URL时,如何动态更改图像文件 我所做的是根据脚本运行更改图像,并要求用户单击URL进行测试。更改图像是通过创建一个引导表单来完成的,该表单将从工作表中读取问题id,并从g.drive中拾取与之对应的图像。但我面临一个问题,即用户必须刷新页面以获得正确的url(url仅针对问题id进行更改,因此如果不刷新,它将拾取旧的问题id) 有没有一种方法可以通过用户的单击来完成?有什么方法可以避免刷新? 下面给出了脚本。任何帮助都是非常值得的。 //执行此脚本是为了根据问题ID为试验表单创建URLGoogle apps script 动态更改窗体中的图像文件,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我希望有人能帮助我,我现在所做的是否正确。 我需要有一个单一的形式进行在线问题(只有一个问题的形式)在我的谷歌网站。表单有用户、电子邮件、问题Id、图像(图像基本上就是问题)、多选答案。由于问题太多,我宁愿只保留一个表格来获得答案。 我计划向每个用户共享(仅查看)电子表格,每个用户都有每个测试的URL。 我的问题是,当用户单击共享URL时,如何动态更改图像文件 我所做的是根据脚本运行更改图像,并要求用户单击URL进行测试。更改图像是通过创建一个引导表单来完成的,该表单将从工作表中读取问题id,并
function BuildPilotUrls()
{
var form = FormApp.openById("1fe3cuSwx2YgW6ruKTXFNbHcXSz3e0MztlSJqVb2pNkw"); //Pilot form
var items = form.getItems();
var ss = SpreadsheetApp.openById("1XNRrLPcWMNV8fORJn7jvfpc5WsM1i_rArCtZKD6b9pc");
sheet = ss.getSheetByName("Questions");
// var sheet = ss.getActiveSheet();
var data = sheet.getDataRange().getValues(); // Data for pre-fill
//var formUrl = ss.getFormUrl(); // Use form attached to sheet
var formResponse = form.createResponse();
// Skip headers, then build URLs for each row in Sheet1.
for (var i = 1; i <data.length; i++ ) {
// Create a form response object, and prefill it
// Prefill Name
var formItem = items[0].asTextItem();
var response = formItem.createResponse(data[i][5]);
formResponse.withItemResponse(response);
// Get prefilled form URL
var url = formResponse.toPrefilledUrl();
Logger.log(url);
sheet.getRange(i+1,10).setValue(url);
url='HYPERLINK("'+url+'","click here")';
sheet.getRange(i+1,9).setFormula(url);
}
};
// This is triggered onSubmit of Pilot form with Question Id.
function setImage()
{
//first open the pilot form. Get response for Qid and create file name.
//check the file name in the folder and insert that image into the test form as actual question.
var form = FormApp.openById("1fe3cuSwx2YgW6ruKTXFNbHcXSz3e0MztlSJqVb2pNkw"); ////CBSE-X-Maths-Pilot form
var formResponses = form.getResponses();
var formResponse = formResponses[formResponses.length-1];
var itemResponses = formResponse.getItemResponses();
var itemResponse = itemResponses[0];
// Logger.log('Response #%s to the question "%s" was "%s"',
// (i + 1).toString(),
// itemResponse.getItem().getTitle(),
var Qid= itemResponse.getResponse();
Logger.log('Response QID "%s" ',Qid);
var array1 = [{}];
array1 = Qid.split("-"); //prase based on -
var str="C-X-M-";
var ChNo="000"+array1[2];
var QNo="000"+array1[3];
ChNo=ChNo.slice(-3);
QNo=QNo.slice(-3);
var fileName= str+ChNo+"-"+QNo+".jpg";
var myFolder = DriveApp.getFolderById('0B5AzqjFpdDjkTEYxQXFmSk43dEk'); //CBSE-X-Maths folder
var files = myFolder.getFilesByName(fileName);
while (files.hasNext()) {
var file = files.next();
Logger.log(file);}
var form = FormApp.openById("1FUFb23eH8hrxbwJBrb1ezV0-W6k-IbQri2zXmGYZ0LQ"); //CBSE-X-Maths-Test Form
var items = form.getItems();
formItem = items[3].asImageItem();
formItem.setImage(file.getBlob());
//create URL
var ss = SpreadsheetApp.openById("1XNRrLPcWMNV8fORJn7jvfpc5WsM1i_rArCtZKD6b9pc");
sheet = ss.getSheetByName("UserUrl");
var data = sheet.getDataRange().getValues();
var formResponse = form.createResponse();
for (var i = 1; i <data.length; i++ ) {
var formItem = items[0].asTextItem();
var response = formItem.createResponse(data[i][2]);
formResponse.withItemResponse(response);
formItem= items[1].asTextItem();
response = formItem.createResponse(data[i][3]);
formResponse.withItemResponse(response);
formItem= items[2].asTextItem();
response = formItem.createResponse(Qid);
formResponse.withItemResponse(response);
var url = formResponse.toPrefilledUrl();
url='HYPERLINK("'+url+'","click here")';
sheet.getRange(i+1,5).setFormula(url);
}
};
函数buildPiloturs()
{
var form=FormApp.openById(“1fe3cuSwx2YgW6ruKTXFNbHcXSz3e0MztlSJqVb2pNkw”);//试点表单
var items=form.getItems();
var ss=SpreadsheetApp.openById(“1XNRrLPcWMNV8fORJn7jvfpc5WsM1i_rArCtZKD6b9pc”);
sheet=ss.getSheetByName(“问题”);
//var sheet=ss.getActiveSheet();
var data=sheet.getDataRange().getValues();//预填充的数据
//var formUrl=ss.getFormUrl();//使用附在工作表上的表单
var formResponse=form.createResponse();
//跳过标题,然后为Sheet1中的每一行构建URL。
对于(var i=1;我想你是否需要跟踪用户查看的图像?图像是否按顺序排列?似乎你需要跟踪当前用户查看的图像,并能够对其进行迭代。因此,你希望继续重新打开同一表单,但每次都使用新图像。我想知道是否有使用H的自定义对话框TML服务会更好:您可以保持自定义对话框打开,只需不断更改img。感谢Sandy的帮助。图像不是按顺序排列的。我认为您是对的。我想做的是应该有一个客户端调用,以获取他一天的所有测试作为网页,其中应该有t中测试的问题ID他打电话给page。当客户端点击任何问题ID时,服务器会打开一个带有正确图像的表单。这意味着问题ID应该传递给服务器。但我对这个web应用程序还不熟悉。你能给我指一些客户端和服务器的示例代码吗?它们对新的google sheets执行类似的操作,将其部署到google上网站我不会使用谷歌网站。如果你使用应用程序脚本HTML服务,你基本上可以使用HTML在自定义网站上构建任何东西。如果你想问我更一般的问题,请单击我的用户名,在我的个人资料中查找我的电子邮件。