Google Sheets API: как "опубликовать в интернете" для встраиваемого листа?
Если бы я хотел опубликовать таблицу Google Таблиц, чтобы я мог вставить ее на страницу в iframe, я бы вручную сделал следующее:
- перейдите на Google Диск
- откройте таблицу
- File > Publish to Web > Embed > скопируйте созданную ссылку iframe в html-файл
как бы я программно достиг вышеуказанного через Google Sheets API, используя JavaScript на переднем конце? Я генерации таблиц на муха в моем приложении и хотите сразу же вставить их на страницу после создания.
после создания листа я могу динамически создавать элемент iframe с необходимыми атрибутами (среди прочего, идентификатор листов). Это вызывает ошибку. От этого вопрос, похоже, что лист должен иметь published: true
атрибут или что - то еще, но это требует использования API диска-я пытаюсь избежать этого. Возможно ли это обработать только через API для листов?
2 ответов
после поиска по всему API листов, googling и просто общего поиска души, у меня не было выбора, кроме как Включить API диска и использовать его для выполнения моих заявок. Вот решение, которое я придумал. Надеюсь, это поможет кому-то еще!
использовал этот скрипт из Google для клиентской библиотеки JS в :
<body>
...
<script type="text/javascript" src="https://apis.google.com/js/client.js"></script>
</body>
тогда для материалов JS:
// Cache the api's into variables.
var sheets = gapi.client.sheets;
var drive = gapi.client.drive;
// 1. CREATE NEW SPREADSHEET
sheets.spreadsheets.create({
properties: {
title: 'new-sheet'
}
}).then(function(newSpreadSheet) {
var id = newSpreadSheet.result.spreadsheetId;
// 2. PUBLISH SPREADSHEAT VIA DRIVE API
drive.revisions.update({
fileId: id,
revisionId: 1
}, {
published: true, // <-- This is where the magic happens!
publishAuto: true
}).then(function() {
// 3. DISPLAY SPREADSHEET ON PAGE VIA IFRAME
var iframe = [
'<iframe ',
'src="https://docs.google.com/spreadsheets/d/',
id,
'/pubhtml?widget=true&headers=false&embedded=true"></iframe>'
].join('');
// We're using jQuery on the page, but you get the idea.
$('#container').html($(iframe));
});
});
Как вы заключили, это невозможно через API листов сегодня и возможно только через API диска (используя PATCH https://www.googleapis.com/drive/v3/files/fileId/revisions/revisionId
запрос, задокументированный в https://developers.google.com/drive/v3/reference/revisions/update).