Мне нужно перезаписать существующий файл Google Таблиц с прикрепленным скриптом

У меня есть файл Google Sheets с прикрепленным скриптом. Скрипт выполняет ряд функций, во-первых, он создает клон самого себя с помощью makeCopy. Эта часть работает. Теперь я хочу иметь то же имя клонированного файла Google и тот же идентификатор файла Google и просто обновлять контент, который включает электронную таблицу и связанный скрипт Google.

if (!fileFound){
  var file = masterSSFile.makeCopy(reportFileName, RepFolder);
} else {
  oldFile.setContent(masterSSFile.getBlob());        
}

Когда я использую makeCopy с тем же именем файла, он создает второй файл с тем же именем, но с другим идентификатором файла. Часть else не работает, потому что аргумент .setContent, кажется, просто принимает текст. Результат - слово "Blob" в старом файле, все остальное пропало.

У меня есть другие сценарии, которые обновляют содержимое существующей электронной таблицы, переопределяя содержимое различных листов, но я также хочу, чтобы связанный сценарий также был включен в обновленный файл с тем же идентификатором файла.


person MartyD    schedule 12.02.2016    source источник
comment
Я знаю, что можно обновить содержимое файла Stand Alone Apps Script с помощью кода. Но я не думаю, что возможно обновить существующий файл скрипта приложений, привязанный к электронной таблице. При использовании надстройки документ с надстройкой автоматически получает обновленный код.   -  person Alan Wells    schedule 12.02.2016


Ответы (1)


Я нашел это....

Перезаписать файл изображения с помощью скрипта Google Apps

и попытался использовать

var masterSpreadsheetID = SpreadsheetApp.getActiveSpreadsheet().getId();
var masterSpreadsheetFile = DriveApp.getFileById(masterSpreadsheetID);
var oldFileID = oldFile.getId();
var oldFileName = oldFile.getName();
var newBlob = masterSpreadsheetFile.getBlob();
var file = {
  title: oldFileName,
  mimeType: 'application/vnd.google-apps.spreadsheet'
  };
var f = Drive.Files.update(file, oldFileID, newBlob);

Я получаю сообщение об ошибке: к сожалению, произошла ошибка сервера. Подождите немного и попробуйте еще раз. в этой строке: Drive.Files.update (file, oldFileID, newBlob);

Прочитав это: https://github.com/google/google-api-nodejs-client/issues/495

похоже, Drive.Files.update () не поддерживает связанные скрипты.

person MartyD    schedule 14.02.2016
comment
то, что вы пытаетесь сделать, просто невозможно. Фактически вы можете перезаписать содержимое электронной таблицы, включая формат и формулы, но это не включает прикрепленный скрипт. Единственный способ сохранить сценарий - скопировать файл (с помощью API диска), но тогда идентификатор будет другим. - person Serge insas; 14.02.2016
comment
Спасибо, это то, что я теперь понимаю, и еще раз спасибо, что нашли время ответить. Я нашел способ жить с изменением идентификатора каждый раз, когда файл обновляется с помощью .makeCopy. - person MartyD; 15.02.2016