Google Scripts - не удается найти лист назначения после создания формы - PullRequest
1 голос
/ 22 марта 2020

Мой скрипт программно создает форму Google и устанавливает место назначения для текущей электронной таблицы:

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

// several form items added here

Затем я хотел бы переименовать лист назначения и внести несколько изменений в форматирование. Когда я делаю, однако, лист, кажется, не существует. Например, getSheets() не содержит новый лист! (И да, в идеале я хотел бы открыть лист по идентификатору; см. Функцию ниже, которая также не работает.)

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

Приведенный выше код открывает то, что я считаю индексом 1, а не индексом 0 потому что лист не проиндексирован. Я даже пытался создать задержку в несколько секунд (надеясь, что это просто вопрос времени, чтобы позволить syn c происходить между клиентом и сервером), но безуспешно.

Я также пробовал что-то вроде следующее, как предлагается в другом месте здесь, при переполнении стека, но лист назначения не появляется в 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;
}

Я не смог никого найти есть похожая проблема на веб-сайтах. Любой совет будет принят во внимание. Спасибо!

1 Ответ

1 голос
/ 23 марта 2020

Добро пожаловать в стек!

Я полагаю, ваш сценарий привязан к листу? В зависимости от того, как вы вызываете скрипт, вы можете не увидеть новые листы из-за кеширования браузера.

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();
}
...