J'ai créé une fonction dans le script Apps associé à une feuille de calcul:
function importNotes() {
s = SpreadsheetApp.openById('spreadsheet-key').getRange('F2').getNotes();
return s;
}
Notez que la feuille de calcul à laquelle la fonction est attachée n’est pas celle à partir de laquelle la note est lue. Les deux sont la propriété de moi.
Lorsque j'exécute la fonction dans le débogueur, cela fonctionne, par exemple, définit la variable locale sur [['This is a note']]
. (Bien sûr, j'utilise une clé de feuille de calcul réelle.)
Lorsque je mets ceci dans une cellule de la feuille de calcul associée:
=importNotes()
Je reçois une erreur:
You do not have permission to perform that action. (line 3).
J'ai essayé de renommer la fonction pour éviter la mise en cache et le rechargement de la feuille de calcul, mais l'erreur persiste.
Comment puis-je résoudre le problème de permission?
Il s’agit d’une des restrictions imposées aux fonctions personnalisées: elles ne peuvent pas effectuer de tâches nécessitant une autorisation, telles que l’accès aux fichiers de l’utilisateur. De la documentation :
Contrairement à la plupart des autres types de scripts d'applications, les fonctions personnalisées ne demandent jamais aux utilisateurs d'autoriser l'accès aux données personnelles. Par conséquent, ils ne peuvent appeler que des services n'ayant pas accès à des données personnelles, notamment:
[une liste qui ne comprend pas inclut SpreadsheetApp]
Pour utiliser un service autre que ceux répertoriés ci-dessus, créez un menu personnalisé qui exécute une fonction de script Apps au lieu d'écrire une fonction personnalisée. Une fonction déclenchée depuis un menu demandera à l'utilisateur une autorisation si nécessaire et pourra par conséquent utiliser tous les services de script Apps.
Une autre solution, peut-être plus adaptée à votre cas, consiste à utiliser ImportRange
dans votre feuille de calcul avec la fonction et à accéder à ces cellules. Une fonction personnalisée peut accéder aux méthodes en lecture seule du service Spreadsheet , telles que getSheetByName, getRange, etc.