Получить URL/ идентификатор документа после копирования файла
Я пытаюсь обновить скопированный документ по завершении копирования, добавить его в другую папку и удалить его корневой файл. Скрипт Google не может найти недавно скопированный файл. Ошибка находится в нижней половине кода, окруженного звездочками с TypeError.
Я подозреваю, что это связано с линией var doc = DocumentApp.getActiveDocument();
, Я не уверен, как получить URL-адрес недавно скопированного документа (file2
или же Date - Weekly Agenda
).
function copyupdateWeeklyAgenda() {
var file = DriveApp.getFileById("FILEKEY");
var source_folder = DriveApp.getFolderById("FOLDERKEY");
var dest_folder = DriveApp.getFolderById("FOLDERKEY");
// Make a backup copy.
var file2 = file.makeCopy('Date - Weekly Agenda');
dest_folder.addFile(file2);
source_folder.removeFile(file2);
//START Update Weekly Agenda Data ---
var ssUrl = 'https://whydoyouwanttoknow.com';
var sheetName = 'Sheet1'; // name of sheet to use
var rangeName = 'A1:B2'; // range of values to include
var values = SpreadsheetApp.openByUrl(ssUrl)
.getSheetByName(sheetName)
.getRange(rangeName)
.getValues();
var doc = DocumentApp.getActiveDocument();
**var body = doc.getBody();** <--- TYPEERROR: Cannot call method "getBody" of null.
var ranges = doc.getNamedRanges('embeddedSheet-range');
if (ranges.length == 0) {
var table = body.appendTable(values);
...ETC.
1 ответ
Ваш file2
переменная является объектом класса File
потому что это то, что File#makeCopy
возвращается. Чтобы получить соответствующий Document
использовать
var doc = DocumentApp.openById(file2.getId());
замечания
Метод
getActiveDocument
относится к документу, к которому прикреплен скрипт (если есть). Это не означает "вещь, которую скрипт обрабатывает в настоящее время".Если вы имели дело с таблицей, то
var ss = SpreadsheetApp.open(file2)
вернетSpreadsheet
содержалась вfile2
, По-видимому, разработчики API забыли включитьopen
метод вDocumentApp
, поэтому мы должны пройти через идентификатор файла, как указано выше.