web-dev-qa-db-fra.com

Comment accéder aux données de différentes feuilles de calcul Google via Google Apps Script?

J'écris un script Google Apps sur mon site Google et j'essaie d'utiliser des données fournies sur deux onglets différents dans une feuille de calcul Google. D'après ce que j'ai cru comprendre de la documentation, je pouvais utiliser toutes les méthodes disponibles dans la classe SpreadsheetApp sur un script Sites en utilisant simplement la méthode openById().

En tout cas voici ce que j'ai essayé de faire

function doGet(e) {

    var doc = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE).getActiveSheet();
    SpreadsheetApp.setActiveSheet(doc.getSheetId()[1]);

    //....
}

Je reçois l'erreur

Impossible de trouver la méthode setActiveSheet (. (Ligne 4)

Je retire mon travail de ce lien: Stockage des données dans Google Spreadsheets ainsi que de la section Service utilisateur répertoriée sous Création d'interfaces utilisateur.

Quelqu'un a vu ce que je faisais mal dans ces deux lignes?

10
Mathitis2Software

setActiveSheet doit être utilisé uniquement avec la feuille de calcul affichée par l'interface utilisateur, une feuille d'une feuille de calcul que vous avez ouverte dans votre navigateur.

Avec SpreadsheetApp.openById, vous ouvrez une feuille de calcul pour accéder à ses données, mais celle-ci ne s'ouvre pas dans votre navigateur. Il n'a pas d'interface utilisateur.

J'ai trouvé ces commentaires dans https://developers.google.com/apps-script/class_spreadsheetapp?hl=es-ES#openById :

// The code below opens a spreadsheet using it's ID and gets the name for it.
// Note that the spreadsheet is NOT physically opened on the client side.
// It is opened on the server only (for modification by the script).
var ss = SpreadsheetApp.openById("abc1234567");

Certains exemples supposent que votre script est exécuté dans votre feuille de calcul. Ce n'est pas votre cas, car vous exécutez un script en tant que service, qui devrait avoir sa propre interface utilisateur.

19
Alejandro Silvestri

Je pense que @ megabyte1024 corrige les erreurs de syntaxe, mais en réponse à votre commentaire à @YoArgentina:

Savez-vous qu'il existe un moyen d'accéder aux données sur différents onglets, puis Par le biais d'un service ne s'exécutant pas dans la feuille de calcul?

Est-ce que ce genre d'aide?

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE);
var sheets = ss.getSheets();
// the variable sheets is an array of Sheet objects
var sheet1A1 = sheets[0].getRange('A1').getValue();
var sheet2A1 = sheets[1].getRange('A1').getValue();
5
AdamL

Il y a au moins un problème dans ces deux lignes. La première est que les paramètres setActiveSheet sont un objet de la classe Sheet et que la méthode getSheetId renvoie une valeur entière. En passant, cette méthode (getSheetId) est non documentée . Le deuxième problème peut survenir si SpreadsheetApp n'a pas de feuille de calcul active. Dans ce cas, il y a "Veuillez d'abord sélectionner une feuille de calcul active". Erreur. Utilisez la méthode SpreadsheetApp.setActiveSpreadsheet pour définir une feuille de calcul active.

1
megabyte1024

Vous devez accéder à chaque feuille séparément. 

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE);
var sheet = ss.getSheets()[0]; // "access data on different tabs"
ss.setActiveSheet(sheet);
0
James Ferreira