Google apps script 动态更改窗体中的图像文件

Google apps script 动态更改窗体中的图像文件,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我希望有人能帮助我,我现在所做的是否正确。 我需要有一个单一的形式进行在线问题(只有一个问题的形式)在我的谷歌网站。表单有用户、电子邮件、问题Id、图像(图像基本上就是问题)、多选答案。由于问题太多,我宁愿只保留一个表格来获得答案。 我计划向每个用户共享(仅查看)电子表格,每个用户都有每个测试的URL。 我的问题是,当用户单击共享URL时,如何动态更改图像文件 我所做的是根据脚本运行更改图像,并要求用户单击URL进行测试。更改图像是通过创建一个引导表单来完成的,该表单将从工作表中读取问题id,并

我希望有人能帮助我,我现在所做的是否正确。 我需要有一个单一的形式进行在线问题(只有一个问题的形式)在我的谷歌网站。表单有用户、电子邮件、问题Id、图像(图像基本上就是问题)、多选答案。由于问题太多,我宁愿只保留一个表格来获得答案。 我计划向每个用户共享(仅查看)电子表格,每个用户都有每个测试的URL。 我的问题是,当用户单击共享URL时,如何动态更改图像文件

我所做的是根据脚本运行更改图像,并要求用户单击URL进行测试。更改图像是通过创建一个引导表单来完成的,该表单将从工作表中读取问题id,并从g.drive中拾取与之对应的图像。但我面临一个问题,即用户必须刷新页面以获得正确的url(url仅针对问题id进行更改,因此如果不刷新,它将拾取旧的问题id)

有没有一种方法可以通过用户的单击来完成?有什么方法可以避免刷新? 下面给出了脚本。任何帮助都是非常值得的。 //执行此脚本是为了根据问题ID为试验表单创建URL

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在自定义网站上构建任何东西。如果你想问我更一般的问题,请单击我的用户名,在我的个人资料中查找我的电子邮件。