首页 > 解决方案 > Google Scripts - 创建表单后找不到目标表

问题描述

我的脚本以编程方式创建了一个 Google 表单并将目标设置为当前电子表格:

var sheetId = SpreadsheetApp.getActiveSpreadsheet().getId();  
var form = FormApp.create(acctName).setTitle(acctName).setDestination(FormApp.DestinationType.SPREADSHEET, sheetId);

// several form items added here

接下来,我想重命名目标工作表并进行一些格式编辑。但是,当我这样做时,该表似乎不存在。比如getSheets()不包含新的Sheet!(是的,理想情况下,我想通过 ID 打开工作表;请参阅下面的功能,该功能也不起作用。)

var sheets = SpreadsheetApp.openById(form.getDestinationId()).getSheets();
SpreadsheetApp.setActiveSheet(sheets[0]);

上面的代码打开了我认为索引 1,而不是索引 0,因为工作表没有索引。我什至尝试创建几秒钟的延迟(希望允许客户端和服务器之间发生同步只是时间问题)但没有任何成功。

getSheets()正如 Stack Overflow 上其他地方所建议的那样,我也尝试了以下类似的方法,但即使通过单独的函数调用目标工作表也不会出现:

function getFormDestinationSheetId(form) {

  var destinationId = form.getDestinationId();      
  if(destinationId) {

    var spreadsheet = SpreadsheetApp.openById(destinationId);        
    spreadsheet.getSheets().forEach(          
      function(sheet) {            
        var sheetFormUrl = sheet.getFormUrl();
        if(sheetFormUrl) {             
          var sheetForm = FormApp.openByUrl(sheetFormUrl);
          if(sheetForm.getId() == form.getId()) {
            return sheet.getSheetId();
          }
        }
      }
    );
  }
  return null;
}

我一直无法在网上找到任何有类似问题的人。任何意见,将不胜感激。谢谢!

标签: google-apps-scriptgoogle-sheetsgoogle-forms

解决方案


欢迎来到堆栈!

我假设您的脚本绑定到工作表?根据您调用脚本的方式,由于浏览器缓存,您可能看不到新工作表。

function myFunction() {
  var sheet = SpreadsheetApp.getActive();
  var sheetId = sheet.getId();  
  var form = FormApp.create('acctName').setTitle('acctName').setDestination(FormApp.DestinationType.SPREADSHEET, sheetId);

  var ssSheets = sheet.getSheets();

  var respSheet = ssSheets[0]

  respSheet.getRange('A1').setBackground('RED');
  respSheet.getRange('C1').setFormula('=COUNTA($C$2:$C)');
  respSheet.setColumnWidth(2, 100);

  SpreadsheetApp.flush();
}

推荐阅读