Программно создайте Google Sheet и получите его JSON URL - PullRequest
1 голос
/ 14 июня 2019

У меня есть скрипт Служб 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, и общий доступ за пределами домена компании заблокирован.

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Для доступа к частным URL вам потребуется oauth авторизация.Вы можете отправить заголовок авторизации с токеном на предъявителя, предоставленным ScriptApp.getOAuthToken() для обхода полного потока oauth.

UrlFetchApp.fetch(url, {headers: {Authorization: 'Bearer ' + ScriptApp.getOAuthToken()}})

Чтобы получить JSON из листа, Вы также можете использовать Googleвизуализация api :

UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/[SPREADSHEET_ID]/gviz/tq?gid=0&tqx=out:json", 
{headers: {Authorization: 'Bearer ' + ScriptApp.getOAuthToken()}});

или

UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/[SPREADSHEET_ID]/gviz/tq?gid=0&tqx=out:json&access_token="+ ScriptApp.getOAuthToken())
0 голосов
/ 15 июня 2019

Я не уверен, как это меняется с общедоступным / приватным, но вы можете открыть любой документ Google, включая таблицы с идентификатором, например:

https://drive.google.com/open?id=XXXXX

Делает ли это то, что вам нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...