Google 脚本 - 无法在创建表单后找到目标 Sheet

Google Scripts - Can't Find Destination Sheet After Form Creation

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

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

// several form items added here

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

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

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

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

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;
}

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

欢迎来到 Stack!

我假设您的脚本绑定到 sheet?由于浏览器缓存,您可能看不到新的 sheet,具体取决于您调用脚本的方式。

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:$C)');
  respSheet.setColumnWidth(2, 100);

  SpreadsheetApp.flush();
}