¿Cómo especificar toda la hoja como rango en Hojas de cálculo de Google?

27

La mejor solución que he encontrado hasta ahora es:

worksheet_name!$A$1:$YY

pero idealmente me gustaría poder simplemente escribir, por ejemplo:

worksheet_name!

Entonces, ¿alguien sabe: hay una sintaxis para especificar una hoja completa como un rango?

sampablokuper
fuente

Respuestas:

10

He creado un pequeño fragmento de Google Apps Script (GAS) para hacer el trabajo por usted.

Código

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

En el menú de la hoja de cálculo, seleccione Herramientas> Editor de secuencias de comandos y agregue el código. Asegúrese de presionar el botón de error:
ingrese la descripción de la imagen aquí

Uso

=sheetRange("sheetName",int)

Use la intopción como se explica en los comentarios.

Ejemplo

Te he creado un archivo de ejemplo: Hoja como rango

Observaciones

En este caso, hay dos formas de determinar un rango en una hoja de cálculo a través de GAS:

  1. int=1; Por el getDataRangemétodo Esto recuperará un rango, en el que la última columna es la que tiene datos. Lo mismo explica el número de filas. Esta suele ser la ruta más sencilla. Ver segunda hoja en el archivo de ejemplo.
  2. int=2; Por el getSheetValuesmétodo Esto recuperará un rango "WYSIWYG". Ver tercera hoja en el archivo de ejemplo.
  3. Las tasas de actualización de estos tipos de funciones personalizadas no son inmediatas, así que tenga paciencia. La actualización de los datos puede demorar varias horas.

Referencias

Jacob Jan Tuinstra
fuente
¿Por qué tomaría varias horas para que esta función muestre datos actualizados? Pensé que el objetivo de usar una función como esta sería tener siempre el rango preciso.
ClearCloud8
1
La solución usando getSheetValues ​​() es un 20% más rápido que usando getDataRange () con getValues ​​(). Probado con una hoja que contiene 38k celdas.
Mark Witczak
11

Puede usar A: Z o A: AB o A: XX (siendo XX la última columna de su página):

Captura de pantalla del uso de esto para aplicar formato condicional a las filas en función del valor de una sola celda

Stefan Denk
fuente
1
Ist muere: "Denk Mal Neu"? ¿Cómo responde esto a la pregunta?
Jacob Jan Tuinstra
1
Todos aquí saben cómo especificar un rango. Esta no era la pregunta.
3

Hojas de cálculo de Google no tiene una sintaxis de rango para todo el rango de hojas.

La siguiente fórmula devolverá la dirección de rango de toda la hoja llamada Sheet1

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

Para usarlo como referencia, colóquelo dentro de INDIRECTO. La siguiente fórmula devolverá una matriz de todos los valores en Sheet1.

= ArrayFormula (
  INDIRECTO(
    "Hoja1!"
    & DIRECCIÓN (1,1, VERDADERO)
    & ":"
    & DIRECCIÓN (FILAS (Hoja1! A: A), COLUMNAS (Hoja1! 1: 1) ,, VERDADERO)
    ,
    CIERTO
  )
)
Rubén
fuente
1

No conozco uno específico, pero creo que puede usar algunas fórmulas si no conoce el número de filas / columnas:

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

Aquí, Sheetestá el nombre de su hoja, y @es una cadena arbitraria. Si esa hoja que está seleccionando tiene @una celda, no funcionará. Puede reemplazarlo por otro carácter si alguna vez la hoja contiene dicha celda.

El COUNITFaquí cuenta el número de filas en la columna de A: A que no contiene @, que debe ser todo si no hay células que lo contienen, y INDIRECTtransformadas Sheet!1:###(donde ###es el número de filas) en un rango seleccionado real.

alemán
fuente
Aprecio el esfuerzo, pero por lo que puedo decir, su sugerencia no ofrece ventajas sobre la solución que mencioné en mi pregunta, pero tiene las desventajas de ser más detallado y requerir que el usuario ingrese un carácter que nunca estará presente. en la hoja
sampablokuper
@sampablokuper Al ser detallado, no creo que pueda encontrar una solución para eso, en cuanto a la segunda parte, pasé por alto algo que ahora he agregado a mi respuesta. Además, hasta donde puedo ver, la ventaja que tiene sobre su solución actual es que no necesita saber cuántas filas o columnas tiene la hoja. Pero sí, eso es todo lo posible :( Quizás uno pueda inventar una función a partir de un script VBA.
Jerry
Gracias, pero mi solución actual no requiere que uno sepa cuántas filas tiene la hoja, ni cuántas columnas tiene siempre que tenga <676 columnas.
sampablokuper
1

Ya se han dado las mejores respuestas para aquellos que están operando dentro de appscript, pero si alguien está trabajando dentro de Google Sheets correctamente, entonces aquí hay un enfoque que puede satisfacer sus necesidades:

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

Explicación : * ¡Está esencialmente especificando el rango a través de una cadena que se concatena con el número de filas en worksheet_name!

Algunas ventajas de este enfoque : * Es 'dinámico' ... si agrega filas en la parte inferior, el rango se ajustará en consecuencia * Ligero: puede incluir esto en una función de rango / consulta de importación

Desventajas : * No lo he probado en todos los casos, por lo que solo podría funcionar para casos de uso específicos * Personalmente, prefiero hacer que las cosas sean dinámicas / limpias, por lo que una especie de función personalizada sería un buen punto medio entre appscript y este enfoque liviano

JTopsalot
fuente
1

Esto funciona para mi:

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

Utilizado en un script encuadernado, combine el nombre de la hoja con un "!" y luego obtenga la notación A1 del rango de datos en la hoja elegida

Rata métrica
fuente
0

Pude seleccionar toda la hoja nombrando el rango como la hoja sin el signo de exclamación.

Tenía una pestaña llamada datos. En lugar de usar datos! o datos! A1: ZZ.

ajon
fuente
Cuando asignamos un nombre a un rango con nombre, se debe especificar una referencia de rango. ¿Qué rango de referencia usaste?
Rubén
-1

Para especificar toda la hoja como un rango, utilice:

worksheet_name!A1:ZZ

puedes probarlo aquí: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/clear

o si usa Java (para borrar todo en Sheet1):

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

o si solo quiere usarlo en una fórmula (por ejemplo: SUMA) en otra hoja (por ejemplo: Hoja2) puede usar la siguiente referencia:

=SUM(Sheet1!A1:ZZ)

^ esto sumará todas las celdas existentes en Sheet1 y pondrá el valor en una celda en Sheet2, puede encontrar el ejemplo aquí: https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing . En este ejemplo, tenemos 3 columnas y 5 filas en la Hoja1, por lo que esta fórmula = SUMA (Hoja1! A1: ZZ) las selecciona a todas. Puede agregar filas o columnas en Sheet1 y esta solución aún seleccionará todas las celdas.

PD: si rechaza votar mi respuesta, explique por qué.

Maksym Ovsianikov
fuente
-2

Suponiendo que conoce el número de filas, puede nombrar la hoja completa como "nombre_tabla de trabajo":

PASOS:

  1. Seleccione toda la hoja de trabajo
  2. Haga clic en 'Datos' -> 'Rangos con nombre y protegidos'
  3. Escriba "worksheet_name" para nombrar la selección y haga clic en Listo.

Ahora, cada vez que use "worksheet_name" en una función, hará referencia a toda la hoja de trabajo.

TheJKFever
fuente
44
Su método dará como resultado un rango de "instantánea". ¡Agregar columnas o filas no cambiará el rango con nombre!
Jacob Jan Tuinstra