Script pour insérer une image Google Drive dans une feuille Google Sheets

a marqué ce sujet comme résolu.

Bonjour. Je souhaite écrire un script pour insérer dans une feuille Google Sheets, une image provenant de mon Google Drive, et dont je connais l’ID.

Les modèles de code trouvés sur Internet fonctionnent bien mais à condition que l’image soit publique, c-à-d accessible à qui connaît le lien de partage. Or, mon besoin est de pouvoir effectuer cette insertion pour une image privée, c-à-d accessible aux seuls utilisateurs expressément autorisés, et en premier lieu moi-même puisque je suis le propriétaire de cette image. Pourtant, cette insertion fonctionne bien en mode manuel lorsqu’on désigne l’image par son URL. Par contre, avec un script, j’ai cru comprendre que cela n’était pas possible en en utilisant directement une URL, mais qu’on pouvait y arriver via l’ID et une instruction de type getBlob(). Malheureusement, mes essais n’ont pas abouti faute d’expérience suffisante avec les scripts de Google Apps et les API de Google Drive.

Quelqu’un aurait-il des pistes pour me débloquer ?

D’avance, je le remercie !

Voici deux scripts, dans lesquels xxxxxxxxxxxxxxxx représente l’ID de l’image, et qui insèrent correctement l’image Google Drive dans la feuille Google Sheets si celle-ci est publique mais provoquent un message d’erreur de la forme « We’re sorry, a server error occurred. Please wait a bit and try again. » lorsqu’elle est privée.

function insertImageFromDrive(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0].activate(); sheet.insertImage("https://drive.google.com/uc?id="xxxxxxxxxxxxxxxx", 1, 1);
}

function insertImageFromDriveBis(){
var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0].activate(); var fileId = "xxxxxxxxxxxxxxxx"; var img = DriveApp.getFileById(fileId).getBlob(); sheet.insertImage(img, 1, 1); }

Après quelques investigations, j’ai remarqué qu’avec le premier script, qui utilise l’URL complète, il faut en effet que l’image de Google Drive ne soit pas privée pour que l’insertion s’effectue.

Par contre, le second script, qui utilise l’instruction getBlob() fonctionne même si l’image est privée, mais à condition que sa taille ne soit pas trop importante, le seuil semblant se situer vers 150 Ko.

J’ai vraiment du mal à trouver des informations claires sur ce qu’il est possible de faire.

Merci pour cette suggestion. Pourtant, le script n° 2 peut insérer une image de 600 Ko à condition qu’elle est été rendue publique, c-à-d visible à qui détient l’URL. Mais si l’image est déclarée privée, le message d’erreur suivant s’affiche au moment de l’exécution de l’instruction d’insertion : « Erreur lors de la récupération d’une image à partir d’une URL correcte ou erronée ». Se peut-il qu’il y ait un cache qui n’interviendrait que pour traiter les images privées ?

Ce que je voulais dire c’est que ton navigateur peut garder en cache une image où tu n’a plus les droits d’accès aux serveurs et ne pas actualiser ce changement d’état.

À mon avis (je n’ai pas d’expérience à ce sujet, c’est pour ça que je n’ai pas posté avant), je pense que quand c’est un accès/autorisation par lien tout va bien. Mais que quand c’est une autorisation par compte, le serveur/client qui exécute le script doit être considéré comme un anonyme et non comme l’utilisateur correspond. Essaye par iframe si c’est possible.

+0 -0

Merci pour ces précisions. En effet, le cache joue un rôle puisque lorsqu’on fait plusieurs essais avec la même image, le temps nécessaire à l’insertion est toujours plus long lors du premier téléchargement.

Cependant, les essais que j’ai effectués avec des images Google Drive dont la taille excède 150 Ko montrent que l’insertion avec le script n°2 n’est possible que si l’image est au moins semi-publique (c-à-d accessible à qui connaît l’URL). Si on exécute à nouveau le script après avoir rendue l’image privée, un message d’erreur s’affiche, alors que l’image est probablement dans le cache du navigateur. A contrario, une image privée de moins de 150 Ko s’insérera sans souci, même si c’est la première fois qu’on la télécharge.

Bien noté la suggestion d’accompagner la demande d’insertion d’une autorisation préalable accordée au programme mais j’ignore comment procéder par script pour obtenir cet "access token".

Bonjour, J’ai le même soucis avec un fichier google sheet partagé avec moi. La personne qui a créé ce fichier, dispose des images dans des cellules et je ne peux pas les récupérer lorsque je clique sur le lien HYPERLINK (masqué image commerciale) J’ai cette erreur. (403. That’s an error.

We’re sorry, but you do not have access to this page. That’s all we know.)

J’ai pourtant toutes les autoristation de modification sur le fichier. Quelle en serait la raison ? Merci de votre aide, Cdlt, Delphine

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte