Come specificare l'intero foglio come intervallo in Fogli Google?


27

La soluzione alternativa che ho trovato finora è:

worksheet_name!$A$1:$YY

ma idealmente vorrei poter semplicemente scrivere, ad esempio:

worksheet_name!

Qualcuno lo sa: esiste una sintassi per specificare un intero foglio come intervallo?

Risposte:


10

Ho creato un piccolo frammento di Google Apps Script (GAS) per fare il lavoro per te.

Codice

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;
}

Nel menu del foglio di calcolo, selezionare Strumenti> Editor di script e aggiungere il codice. Assicurati di premere il pulsante bug:
inserisci qui la descrizione dell'immagine

uso

=sheetRange("sheetName",int)

Utilizzare l' intopzione come spiegato nelle osservazioni.

Esempio

Ti ho creato un file di esempio: foglio come intervallo

Osservazioni

In questo caso, ci sono due modi per determinare un intervallo in un foglio di calcolo tramite GAS:

  1. int=1; Tramite il getDataRangemetodo. Ciò recupererà un intervallo, in cui l'ultima colonna è quella che contiene dati. Lo stesso vale per il numero di righe. Questo è di solito il percorso più semplice. Vedi il secondo foglio nel file di esempio.
  2. int=2; Tramite il getSheetValuesmetodo. Ciò recupererà un intervallo "WYSIWYG". Vedi il terzo foglio nel file di esempio.
  3. Le frequenze di aggiornamento di questi tipi di funzioni personalizzate non sono immediate, quindi ti preghiamo di pazientare. Potrebbero essere necessarie diverse ore per l'aggiornamento dei dati.

Riferimenti


Perché occorrerebbero diverse ore affinché questa funzione mostri i dati aggiornati? Ho pensato che il punto centrale dell'uso di una funzione come questa sarebbe avere sempre un intervallo preciso?
ClearCloud8,

1
La soluzione che utilizza getSheetValues ​​() è più veloce del 20% rispetto all'utilizzo di getDataRange () con getValues ​​(). Testato con foglio contenente 38k celle.
Mark Witczak,

11

Puoi usare A: Z o A: AB o A: XX (con XX come ultima colonna della tua pagina):

Schermata dell'uso di questo per applicare la formattazione condizionale alle righe in base al valore di una singola cella


1
Ist muore: "Denk Mal Neu"? Come risponde alla domanda?
Jacob Jan Tuinstra,

1
Tutti qui sanno come specificare un intervallo. Questa non era la domanda.

3

Fogli Google non ha una sintassi di intervallo per l'intero intervallo di fogli.

La seguente formula restituirà l'indirizzo dell'intervallo dell'intero foglio denominato Foglio1

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

Per usarlo come riferimento, inserirlo all'interno di INDIRECT. La seguente formula restituirà una matrice di tutti i valori in Sheet1.

= ArrayFormula (
  INDIRETTO (
    "Sheet1!"
    E INDIRIZZO (1,1,, VERO)
    & ":"
    E INDIRIZZO (RIGHE (Foglio1 A:! A), COLONNE (Foglio1 1: 1) ,, VERO)
    ,
    VERO
  )
)

1

Non ne conosco uno specifico, ma penso che puoi usare alcune formule se non conosci il numero di righe / colonne:

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

Ecco Sheetil nome del tuo foglio ed @è una stringa arbitraria. Se quel foglio che stai selezionando ha @in una cella, non funzionerà. Puoi sostituirlo con un altro personaggio se mai il foglio contiene una tale cella.

Il COUNITFqui conta il numero di righe nella colonna A: A non contenente @, che dovrebbe essere tutto se non vi sono celle contengono, e INDIRECTtrasforma Sheet!1:###(dove ###è il numero di righe) in un intervallo selezionato reale.


Apprezzo lo sforzo, ma per quanto posso dire, il tuo suggerimento non porta alcun vantaggio rispetto alla soluzione che ho citato nella mia domanda, ma ha gli svantaggi di essere più prolisso e richiedere all'utente di inserire un personaggio che non sarà mai presente nel foglio.
sampablokuper,

@sampablokuper A proposito di essere prolisso, non credo di poter trovare una soluzione per questo, come per la seconda parte, ho trascurato qualcosa che ora ho aggiunto alla mia risposta. Inoltre, per quanto posso vedere, il vantaggio che ha sulla soluzione attuale è che non è necessario sapere quante righe o colonne ha il foglio. Ma sì, questo è quanto arriva :( Forse si può creare una funzione da uno script VBA.
Jerry,

Grazie, ma la mia soluzione attuale non richiede che si sappia quante righe ha il foglio, né quante colonne ha fintanto che ha <676 colonne.
sampablokuper,

1

Le risposte migliori sono già state fornite per coloro che operano all'interno di appscript, ma se qualcuno là fuori sta lavorando all'interno di Fogli Google, allora ecco un approccio che può soddisfare le tue esigenze:

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

Spiegazione : * Stai essenzialmente specificando l'intervallo tramite una stringa concatenata con il numero di righe in worksheet_name!

Alcuni vantaggi di questo approccio : * È 'dinamico' ... se aggiungi righe in fondo, l'intervallo si adatterà di conseguenza * Leggero - puoi schiaffeggiarlo in una funzione importrange / query

Svantaggi : * Non l'ho mai provato in tutti i casi, quindi potrebbe funzionare solo per casi d'uso specifici * Personalmente ho una preferenza per rendere le cose dinamiche / pulite, quindi una sorta di funzione personalizzata sarebbe una buona via di mezzo tra appscript e questo approccio leggero


1

Questo funziona per me:

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

Utilizzato in uno script associato, combina il nome del foglio con un "!" e quindi ottenere la notazione A1 dell'intervallo di dati sul foglio scelto


0

Sono stato in grado di selezionare l'intero foglio nominando l'intervallo come foglio senza il punto esclamativo.

Ho avuto una scheda denominata dati. Invece di usare i dati! o dati! A1: ZZ.


Quando assegniamo un nome a un intervallo denominato, è necessario specificare un riferimento intervallo. Quale intervallo di riferimento hai usato?
Rubén

-1

Per specificare l'intero foglio come intervallo, utilizzare:

worksheet_name!A1:ZZ

puoi provarlo qui: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/clear

o se usi Java (per cancellare tutto in Sheet1):

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

o se vuoi semplicemente usarlo in una formula (ad esempio: SOMMA) su un altro foglio (ad esempio: Foglio2) puoi usare il seguente riferimento:

=SUM(Sheet1!A1:ZZ)

^ Questo sommare tutte le celle esistenti di Sheet1 e mettere il valore in una cella su Foglio2, è possibile trovare l'esempio qui: https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing . In questo esempio abbiamo 3 colonne e 5 righe su Foglio1, quindi questa formula = SOMMA (Foglio1! A1: ZZ) li seleziona tutti. È possibile aggiungere righe o colonne su Sheet1 e questa soluzione selezionerà comunque tutte le celle.

PS: se voti in basso, rispondi alla mia risposta. Per favore, spiega perché.


-2

Supponendo che tu conosca il numero di righe, puoi nominare l'intero foglio come "worksheet_name":

STEPS:

  1. Seleziona l'intero foglio di lavoro
  2. Fai clic su "Dati" -> "Intervalli denominati e protetti"
  3. Digita "worksheet_name" per assegnare un nome alla selezione e fai clic su Fine.

Ora ogni volta che si utilizza "nome_pagina" in una funzione, farà riferimento all'intero foglio di lavoro.


4
Il metodo genererà un intervallo di "istantanee". L'aggiunta di colonne o righe non cambierà l'intervallo denominato !!
Jacob Jan Tuinstra,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.