【问题标题】:Prefill a Google Form using data inside Google Spreadsheet使用 Google 电子表格中的数据预填充 Google 表单
【发布时间】:2016-03-21 07:27:49
【问题描述】:

我不是程序员,只是一个试图简化日常任务的 Google 文档用户。我制作了一些非常有用的小脚本,比如一键发送通知电子邮件给其他用户。现在有个棘手的问题不知道怎么解决,找了几天还是没有头绪。

我正在使用Google SpreadSheet。如果我点击“链接”,它应该会打开一个预先设计的 Google 表单,其中包含:WONameEngineer 字段,由该行的数据填充。例如:Google 表单的Row 1 应在相应的表单字段中填写4478、AAAAAAAAandDavid`。用户应该能够更改它们。

谢谢大家纠正我的英语不好^^

到目前为止,我可以从调试日志中获取正确的数据。问题是当用户单击“链接”打开 Google 表单时,我不知道如何运行此功能。

    function Finish() {
  var sheetOpen = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Open ticket list");
  var dataOpen = sheetOpen.getDataRange().getValues();
  var cellOpen = sheetOpen.getActiveCell();
  var currentRow = cellOpen.getRow();
  var wo = sheetOpen.getRange(currentRow, 1).getValue();
  var name = sheetOpen.getRange(currentRow, 3).getValue();
  var omEng = sheetOpen.getRange(currentRow, 5).getValue();
  // Browser.msgBox('wo = '+ wo +' and name = '+ name +' and Engineer = '+ omEng);

  var form = FormApp.openById('formid');

  Logger.log('Form Title is '+ form.getTitle()); 

  var allItems = form.getItems();
  Logger.log('Total items in this form '+ allItems.length)

  var woId=0;
  var nameId=0;
  var omEngId=0;

  for (i=0; i < allItems.length ; ++i) {
    var itemTitle = allItems[i].getTitle();
    Logger.log('Item Title '+ itemTitle);

    if (itemTitle == 'wo') {
      woId = allItems[i].getId();
    }
  }

  for (i=0; i < allItems.length ; ++i) {
    var itemTitle = allItems[i].getTitle();
    Logger.log('Item Title '+ itemTitle);

    if (itemTitle == 'name') {
      nameId = allItems[i].getId();
    }
  }

  for (i=0; i < allItems.length ; ++i) {
    var itemTitle = allItems[i].getTitle();
    Logger.log('Item Title '+ itemTitle);

    if (itemTitle == 'Engineer') {
      omEngId = allItems[i].getId();
    }
  }


  var woItem = form.getItemById(woId).asTextItem();
  woItem.createResponse(wo);

  var nameItem = form.getItemById(nameId).asListItem();
  nameItem.createResponse(name);

  var omEngItem = form.getItemById(omEngId).asListItem();  
  omEngItem.createResponse(omEng);


}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    主题更改为“Prefill xxx”后,我发现了一个类似的问题,答案很好here。我像这样重新编写代码,效果很好。谢谢大家^__^

    function FinishReport() {
      var ss = SpreadsheetApp.getActive();
      var sheet = ss.getSheetByName("Open ticket list");
      var data = ss.getDataRange().getValues();  // Data for pre-fill
      var headers = data[0];  
      var form = FormApp.openByUrl("https://form_url");
      var items = form.getItems();
      var urlCol = headers.indexOf("Finish Report");
      var stopRow = FindStopRowFromOpenTicket();
    
    
      // Skip headers, then build URLs for each row in Sheet1.
    for (var i = 1; i < stopRow; i++ ) {
        // Create a form response object, and prefill it
        var formResponse = form.createResponse();
    
        // Prefill WO
        var formItem = items[0].asTextItem();
        var response = formItem.createResponse(data[i][0]);
        formResponse.withItemResponse(response);
    
        // Prefill Name
        formItem = items[3].asListItem();
        response = formItem.createResponse(data[i][2]);
        formResponse.withItemResponse(response);
    
        // Prefill Engineer
        formItem = items[4].asListItem();
        response = formItem.createResponse(data[i][4]);
        formResponse.withItemResponse(response);
    
        // Get prefilled form URL
        var url = formResponse.toPrefilledUrl();
        // Logger.log(url);
    
        if (urlCol >= 0) {
          var urlRange = sheet.getRange(i+1,urlCol+1).setValue(url);
        }
    
      }
    
      // Delete URL of closed ticket
      for (var j = stopRow + 1; j < stopRow + 10; j++) {
    
        var delUrlRange = sheet.getRange(j, urlCol+1).setValue("");
    
      } 
    
    };
    
    function FindStopRowFromOpenTicket(){
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Open ticket list");
      var data = sheet.getDataRange().getValues();
      for(var i = data.length-1 ; i >=0 ; i--){
        if (data[i][1] != null && data[i][1] != ''){
          var StopRow = i + 1;
          return StopRow ;
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-27
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 2023-01-13
      相关资源
      最近更新 更多