web-dev-qa-db-fra.com

Comment écrire des données dans une seule plage dans Google Apps Script?

Je suis nouveau ici (deuxième message) et également nouveau dans Google Apps Script.

J'essaie de savoir comment écrire des données dans une seule plage dans une feuille de calcul à l'aide du script Google Apps.

Ressemble à l'aide de Google dans la section Écrire des données n'est pas assez bon

pour expliquer aux débutants, par exemple, comment écrire du texte dans la cellule B5.

5
Shirley Temple

Vous commencez par obtenir une référence à une plage avec la fonction getRange . Une fois que nous avons cela, et puisque cette plage est constituée d’une seule cellule, nous pouvons utiliser la fonction setValue :

var range = SpreadsheetApp.getActiveSpreadsheet().getRange("B5");
range.setValue("TEXT");

... qui écrira TEXT dans la cellule B5.

Si vous avez une plage multicellulaire (ce qui est plus courant) et que vous ne voulez pas écrire la même valeur dans toutes les cellules, vous devez utiliser le paramètre setValues . function (notez le pluriel), qui prend un tableau de tableaux ([[]]) comme argument:

var range = SpreadsheetApp.getActiveSpreadsheet().getRange("B5:C5");
range.setValues([ ["This is column B", "This is column C"] ]);

Dans ce cas, nous avons deux cellules sur la même ligne, de sorte que la matrice externe ne comporte qu'un seul élément: la matrice interne, qui comporte à nouveau deux éléments, un pour chaque cellule.

Comparez à l'exemple suivant, où nous voulons écrire dans une plage qui s'étend sur plusieurs lignes:

var range = SpreadsheetApp.getActiveSpreadsheet().getRange("B5:B7");
range.setValues([ ["This is row 5"], ["This is row 6"], ["This is row 7"] ]);

Et enfin, écrivons dans une plage multi-colonnes et multi-lignes:

var range = SpreadsheetApp.getActiveSpreadsheet().getRange("B5:C7");
range.setValues([ ["This is B5", "This is C5"], ["This is B6", "This is C6"], ["This is B7", "This is C7"] ]);

J'ai créé un exemple de feuille de calcul pour illustrer ces extraits - n'hésitez pas à le copier.


Veuillez noter que toute fonction qui récupère ou manipule directement les données d'un tableur est lente, quelle que soit la quantité de données impliquée. Donc, gardez le nombre d'appels de fonction de feuille de calcul faible. Si vous souhaitez mettre à jour plusieurs cellules, il est généralement préférable d'extraire d'abord le tableau complet des valeurs, puis de mettre à jour les valeurs que vous souhaitez modifier, puis de réécrire l'ensemble du tableau.

Dans cet exemple, nous avons une feuille de calcul avec des données de A1 à H8, mais nous souhaitons mettre à jour uniquement deux cellules: D7 et G6. Le reste des cellules devrait rester inchangé.

var range = SpreadsheetApp.getActiveSpreadsheet().getRange("A1:H8");
var values = range.getValues();
values[6][3] = "This is D7";
values[5][6] = "This is G6";
range.setValues(values);

Notez comment nous utilisons range.getValues() pour obtenir un tableau des valeurs existantes. Ensuite, nous définissons les valeurs individuelles dans ce tableau . Etant donné que les index de tableau JavaScript sont basés sur 0-, la ligne 7 sera 6 et la colonne D, qui est la 4ème colonne, sera 3 - et donc values[6][3]. De même, G6 sera values[5][6].

Enfin, nous écrivons le tableau dans la plage. Nous pouvons mettre à jour autant de valeurs que nous aimons dans le tableau, tout en conservant un nombre d'appels de fonction de feuille de calcul bas: un seul getValues et un seul setValues.


Dans votre commentaire, il est probablement utile de mentionner comment une fonction pure peut être utilisée à partir d’un tableur. Une fonction pure est une fonction qui n’a aucun effet secondaire, c’est-à-dire que sa valeur de retour ne dépend que de ses arguments.

Une fonction pure peut être appelée depuis la feuille de calcul avec =functionName. Supposons que vous souhaitiez qu'une fonction multiplie une valeur d'entrée par 2 et renvoie son résultat. Entrez ceci dans l'éditeur de script:

function multiplyByTwo(num) {
   return num * 2;
}

Dans votre feuille de calcul, supposons que dans la cellule A2, vous saisissez la formule =multiplyByTwo(4). A2 affichera alors 8.
Vous pouvez également utiliser d'autres cellules comme arguments. Modifions la formule en =multiplyByTwo(B2) et dans la cellule B2, entrez le numéro 6. La cellule A2 affichera maintenant 12.
Voici un autre exemple pour les fonctions pures, et en savoir plus sur Fonctions personnalisées dans la documentation de Google .

Vous pouvez également renvoyer un tableau multidimensionnel, auquel cas le résultat s'étendra sur plusieurs lignes/colonnes de la feuille de calcul. La fonction

function multiplyByTwoAndFour(num) {
    return [[num * 2], [num * 4]];
}

peut être utilisé dans la cellule D2 comme =multiplyByTwoAndFour(3), ce qui obligera D2 à afficher 6 et D3 à afficher 12.

7
Vidar S. Ramdal

J'ai créé cette petite fonction que je trouve très utile, elle facilite la mise en données de plages.

function sheetSetRange(data_array,range_addr) {
   data_range = SpreadsheetApp.getActiveSpreadsheet().getRange(range_addr)  
   data_range.setValues(data_array) 
}

quand vous avez ça dans votre fichier .gs, vous pouvez faire comme ça:

définir la valeur de 13 cellules de G21 à S21

sheetSetRange([["z","y","y","y","y","y","y","y","y","y","y","y","z"]],"G21:S21")

pour définir la valeur de 4 cellules dans B2, B3, C2, C3 à 1,2 3,4

sheetSetRange([[1,2][3,4]],"B2:C3")

Vous pouvez probablement imaginer un meilleur nom pour la fonction

0
John Doe