Comment spécifier la feuille entière comme plage dans Google Sheets?

27

La meilleure solution de contournement que j'ai trouvée jusqu'à présent est:

worksheet_name!$A$1:$YY

mais idéalement j'aimerais pouvoir simplement écrire, par exemple:

worksheet_name!

Alors, quelqu'un sait-il: existe-t-il une syntaxe pour spécifier une feuille entière comme plage?

sampablokuper
la source

Réponses:

10

J'ai créé un petit extrait de code Google Apps Script (GAS) pour faire le travail à votre place.

Code

function sheetRange(targetName,int) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var asName = ss.getActiveSheet().getSheetName();
  var tgSheet = ss.getSheetByName(targetName);
  var output;

  if(targetName == asName) {
    output = "Error: target sheet is active sheet !!";
  } else {
    switch(int) {
      case 1: 
        output = tgSheet.getDataRange().getValues();
        break;
      case 2:
        output = tgSheet.getSheetValues(1, 1, tgSheet.getMaxRows(),  
          tgSheet.getMaxColumns());
        break;
      default:
        output = "Choose int to be 1 or 2 !!";
    }
  }
  return output;
}

Dans le menu de la feuille de calcul, sélectionnez Outils> Éditeur de script et ajoutez le code. Assurez-vous d'appuyer sur le bouton de bug:
entrez la description de l'image ici

Usage

=sheetRange("sheetName",int)

Utilisez l' intoption comme expliqué dans les remarques.

Exemple

J'ai créé un exemple de fichier vous vous: feuille comme plage

Remarques

Dans ce cas, il existe deux façons de déterminer une plage dans une feuille de calcul via GAS:

  1. int=1; Via la getDataRangeméthode. Cela récupérera une plage, dans laquelle la dernière colonne est celle qui contient des données. Le même compte pour le nombre de lignes. Il s'agit généralement de l'itinéraire le plus simple. Voir la deuxième feuille dans le fichier d'exemple.
  2. int=2; Via la getSheetValuesméthode. Cela va récupérer une plage "WYSIWYG". Voir la troisième feuille dans le fichier d'exemple.
  3. Les taux de rafraîchissement de ces types de fonctions personnalisées ne sont pas immédiats, alors soyez patient. Le rafraîchissement des données peut prendre plusieurs heures.

Les références

Jacob Jan Tuinstra
la source
Pourquoi faudrait-il plusieurs heures pour que cette fonction affiche des données actualisées? Je pensais que l'intérêt d'utiliser une fonction comme celle-ci serait d'avoir toujours la plage précise?
ClearCloud8
1
La solution utilisant getSheetValues ​​() est 20% plus rapide que l'utilisation de getDataRange () avec getValues ​​(). Testé avec une feuille contenant 38k cellules.
Mark Witczak
11

Vous pouvez utiliser A: Z ou A: AB ou A: XX (XX étant la dernière colonne de votre page):

Capture d'écran de l'utilisation de cette option pour appliquer une mise en forme conditionnelle aux lignes en fonction de la valeur d'une seule cellule

Stefan Denk
la source
1
Ist meurt: "Denk Mal Neu"? Comment cela répond-il à la question?
Jacob Jan Tuinstra
1
Tout le monde ici sait comment spécifier une plage. Ce n'était pas la question.
3

Google Sheets n'a pas de syntaxe de plage pour la plage de feuilles entière.

La formule suivante renverra l'adresse de plage de la feuille entière nommée Sheet1

="Sheet1!"&ADDRESS(1,1,,TRUE)&":"&ADDRESS(ROWS(Sheet1!A:A),COLUMNS(Sheet1!1:1),,TRUE)

Pour l'utiliser comme référence, placez-le dans INDIRECT. La formule suivante renverra un tableau de toutes les valeurs de la feuille Sheet1.

= ArrayFormula (
  INDIRECT(
    "Sheet1!"
    & ADRESSE (1,1,, TRUE)
    & ":"
    & ADRESSE (RANGÉES (Feuille1! A: A), COLONNES (Feuille1! 1: 1), VRAI)
    ,
    VRAI
  )
)
Rubén
la source
1

Je n'en connais pas de spécifique, mais je pense que vous pouvez utiliser certaines formules si vous ne connaissez pas le nombre de lignes / colonnes:

indirect("Sheet!1:"&countif(Sheet!A:A,"<>@")+countif(Sheet!A:A,"=@"))

Voici Sheetle nom de votre feuille et @une chaîne arbitraire. Si cette feuille que vous sélectionnez a @dans une cellule, cela ne fonctionnera pas. Vous pouvez le remplacer par un autre caractère si jamais la feuille contient une telle cellule.

Le COUNITFcompte ici le nombre de lignes dans la colonne A: A ne contenant pas @, ce qui devrait être tout s'il n'y a pas de cellules contenant, et INDIRECTtransformées Sheet!1:###(où ###est le nombre de lignes) dans une plage réelle sélectionnée.

Jerry
la source
J'apprécie l'effort, mais pour autant que je sache, votre suggestion n'apporte aucun avantage par rapport à la solution de contournement que j'ai mentionnée dans ma question, mais présente les inconvénients d'être plus verbeuse et d'obliger l'utilisateur à saisir un caractère qui ne sera jamais présent dans la feuille.
sampablokuper
@sampablokuper À ce sujet étant verbeux, je ne pense pas que je puisse trouver une solution pour cela, comme pour la deuxième partie, j'ai oublié quelque chose que j'ai maintenant ajouté à ma réponse. De plus, pour autant que je puisse voir, l'avantage qu'il a sur votre solution de contournement actuelle est que vous n'avez pas besoin de savoir combien de lignes ou de colonnes la feuille possède. Mais oui, c'est aussi loin que ça :( Peut-être qu'on peut inventer une fonction à partir d'un script VBA.
Jerry
Merci, mais ma solution de contournement actuelle ne nécessite pas que l'on sache combien de lignes la feuille a, ni combien de colonnes elle a tant qu'elle a <676 colonnes.
sampablokuper
1

Les meilleures réponses ont déjà été données pour ceux qui opèrent dans appscript, mais si quelqu'un travaille dans Google Sheets, voici une approche qui peut répondre à vos besoins:

"worksheet_name!1:" & ROWS(worksheet_name!A:A)

Explication : * Vous spécifiez essentiellement la plage via une chaîne qui est concaténée avec le nombre de lignes dans worksheet_name!

Quelques avantages de cette approche : * C'est 'dynamique' ... si vous ajoutez des lignes en bas, la plage s'ajustera en conséquence * Léger - vous pouvez le gifler dans une fonction importrange / query

Inconvénients : * Je ne l'ai pas essayé dans tous les cas, donc cela ne pourrait fonctionner que pour des cas d'utilisation spécifiques * Personnellement, j'ai une préférence pour rendre les choses dynamiques / propres, donc une fonction personnalisée serait un bon compromis entre appscript et cette approche légère

JTopsalot
la source
1

Cela fonctionne pour moi:

var ss = SpreadsheetApp.getActive();
var sh = ss.getSheets()[0];
var rg = sh.getName() +"!"+ sh.getDataRange().getA1Notation();

Utilisé dans un script lié, combinez le nom de feuille avec un "!" puis obtenez la notation A1 de la plage de données sur la feuille choisie

Rat métrique
la source
0

J'ai pu sélectionner la feuille entière en nommant la plage comme feuille sans le point d'exclamation.

J'avais un onglet nommé data. Au lieu d'utiliser des données! ou données! A1: ZZ.

ajon
la source
Lorsque nous attribuons un nom à une plage nommée, une référence de plage doit être spécifiée. Quelle gamme de référence avez-vous utilisée?
Rubén
-1

Pour spécifier la feuille entière comme une plage, veuillez utiliser:

worksheet_name!A1:ZZ

vous pouvez l'essayer ici: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/clear

ou si vous utilisez Java (pour tout effacer dans Sheet1):

Sheets service = getSheetsService(credential);
service.spreadsheets().values().clear(REPORT_WARNINGS_LATAM_FILEID, "Sheet1!A1:ZZ", new ClearValuesRequest()).execute();

ou si vous souhaitez simplement l'utiliser dans une formule (par exemple: SUM) sur une autre feuille (par exemple: Sheet2), vous pouvez utiliser la référence suivante:

=SUM(Sheet1!A1:ZZ)

^ cela additionnera toutes les cellules existantes sur la feuille Sheet1 et mettra la valeur dans une cellule de la feuille Sheet2, vous pouvez trouver l'exemple ici: https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing . Dans cet exemple, nous avons 3 colonnes et 5 lignes sur la feuille Sheet1, donc cette formule = SUM (Sheet1! A1: ZZ) les sélectionne toutes. Vous pouvez ajouter des lignes ou des colonnes sur la feuille Sheet1 et cette solution sélectionnera toujours toutes les cellules.

PS: si vous votez contre ma réponse, veuillez expliquer pourquoi.

Maksym Ovsianikov
la source
-2

En supposant que vous connaissez le nombre de lignes, vous pouvez nommer la feuille entière comme "nom_feuille":

PAS:

  1. Sélectionnez la feuille de calcul entière
  2. Cliquez sur 'Données' -> 'Plages nommées et protégées'
  3. Tapez "worksheet_name" pour nommer la sélection et cliquez sur Terminé.

Désormais, chaque fois que vous utilisez "worksheet_name" dans une fonction, il fera référence à la feuille de calcul entière.

TheJKFever
la source
4
Votre méthode entraînera une plage "d'instantanés". L'ajout de deux colonnes ou lignes ne changera pas la plage nommée !!
Jacob Jan Tuinstra