У меня есть скрипт Служб Google, который копирует электронную таблицу с одного группового диска на другой групповой диск, а затем публикует новую электронную таблицу.Я хочу получить опубликованный URL-адрес определенного листа или получить JSON-URL для этого листа.
Это рабочий код, который у меня есть:
var dFolderID = "destination folder ID";
var sFileID = "source spreadsheet ID";
// get the destination folder
var dFolder = DriveApp.getFolderById(dFolderID);
// get the source file
var sFile = DriveApp.getFileById(sFileID);
// name of the new file
var nFileName = "test - " + Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "yyyyMMddHHmmss");
// make a copy of the spreadsheet
var nFile = sFile.makeCopy(nFileName, dFolder);
// get the ID of the new spreadsheet
var nFileID = nFile.getId();
// publish it
var publishResponse = Drive.Revisions.update({
published: true,
publishedOutsideDomain: false,
publishAuto: true
}, nFileID, 1);
На данный момент создана новая электронная таблица, я знаю идентификатор / ключ таблицы и опубликован.
Из того, что я могу сказать, нет способа получить опубликованный URL, потому что publishResponse.publishedLink
устарел.
Итак, я подумал, что мог бы использовать этот URL, чтобы получить JSON листа:
https://spreadsheets.google.com/feeds/list/SPREADSHEET_ID/WORKSHEET_ID/public/values?alt=json
Но чтобы это работало, я должен знать WORKSHEET_ID
.Я знаю, что могу использовать индекс листа, например 1, 2, 3 и т. Д., Но это изменится, если изменится порядок листов.
Из того, что я могу сказать, единственный способ получить WORKSHEET_ID
- проверить этот URL:
https://spreadsheets.google.com/feeds/worksheets/SPREADSHEET_ID/private/full
Если я загружу этот URL в браузере, я получу ответ XML и могусм. WORKSHEET_ID
в нем.Однако, если я пытаюсь загрузить этот URL из скрипта Google Apps, он не работает.Похоже, он перенаправляет на страницу входа в Google.
var privateFullUrl = Utilities.formatString("http://spreadsheets.google.com/feeds/worksheets/%s/public/full", nFileID);
var privateFullData = UrlFetchApp.fetch(privateFullUrl, {
contentType : 'application/xml; charset=utf-8'
});
Logger.log(privateFullData.getContentText());
Я также проверил SpreadsheetApp.openById(nFileID).getSheetByName("..").getSheetId()
и SpreadsheetApp.openById(nFileID).getSheetByName("..").getRange(1,1).getDataSourceUrl()
, но оба они возвращают числовой идентификатор листа вместо буквенно-цифрового, который мне нужен для https://spreadsheets.google.com/feeds/list/SPREADSHEET_ID/WORKSHEET_ID/public/values?alt=json
.
Есть ли способ получить опубликованный URL или URL JSON для определенного листа?
Редактировать
Я забыл упомянутьэто Enterprise G-Suite, и общий доступ за пределами домена компании заблокирован.