google api - tutorial - API de Hojas de cálculo de Google: ¿Cómo se puede "publicar en la web" en una hoja incrustable?
google spreadsheet api javascript (2)
Como ha concluido, hoy no es posible a través de Sheets API y solo es posible a través de la API de Drive (usando el PATCH https://www.googleapis.com/drive/v3/files/fileId/revisions/revisionId
request, documentado en https://developers.google.com/drive/v3/reference/revisions/update ).
Si quisiera publicar una hoja de cálculo de Hojas de cálculo de Google para poder insertarla en una página dentro de un marco flotante, haría lo siguiente de forma manual:
- Navega a Google Drive
- Abra una hoja de cálculo
- Archivo> Publicar en web> Insertar> Copiar el enlace de iframe generado en un archivo html
¿Cómo lograría programáticamente lo anterior a través de la API de Hojas de cálculo de Google utilizando JavaScript en la interfaz? Estoy generando hojas de cálculo sobre la marcha en mi aplicación y quiero insertarlas inmediatamente en la página una vez creada.
Una vez que se crea la hoja, puedo crear dinámicamente un elemento iframe con los atributos necesarios (la identificación de las hojas, entre otros). Eso arroja un error. A partir de esta pregunta , parece que una hoja debe tener un atributo published: true
o algo así, pero eso requiere el uso de la API de Drive: estoy tratando de evitar eso. ¿Es posible manejar esto solo a través de Sheets API?
Después de buscar en toda la API Sheets, buscar en Google y solo en búsquedas generales, no tuve más remedio que incluir Drive API y usarlo para hacer mi oferta. Aquí está la solución que se me ocurrió. Espero que esto ayude a alguien más allá!
Utilicé este script de Google para la biblioteca JS del lado del cliente en el archivo index.html
:
<body>
...
<script type="text/javascript" src="https://apis.google.com/js/client.js"></script>
</body>
Luego, para las cosas 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));
});
});