Como especificar a planilha inteira como intervalo no Planilhas Google?


27

A melhor solução alternativa que encontrei até agora é:

worksheet_name!$A$1:$YY

mas, idealmente, eu gostaria de poder simplesmente escrever, por exemplo:

worksheet_name!

Então, alguém sabe: existe uma sintaxe para especificar uma planilha inteira como um intervalo?

Respostas:


10

Criei um pequeno trecho de script do Google Apps (GAS) para fazer o trabalho para você.

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

No menu da planilha, selecione Ferramentas> Editor de scripts e adicione o código. Certifique-se de pressionar o botão de bug:
insira a descrição da imagem aqui

Uso

=sheetRange("sheetName",int)

Use a intopção conforme explicado em comentários.

Exemplo

Eu criei um arquivo de exemplo para você: Sheet as Range

Observações

Nesse caso, existem duas maneiras de determinar um intervalo em uma planilha via GAS:

  1. int=1; Via o getDataRangemétodo Isso recuperará um intervalo, no qual a última coluna é a que possui dados. As mesmas contas para o número de linhas. Geralmente, é a rota mais direta. Veja a segunda folha no arquivo de exemplo.
  2. int=2; Via o getSheetValuesmétodo Isso recuperará um intervalo "WYSIWYG". Veja a terceira folha no arquivo de exemplo.
  3. As taxas de atualização desses tipos de funções personalizadas não são imediatas; portanto, seja paciente. Pode levar várias horas para que os dados sejam atualizados.

Referências


Por que levaria várias horas para essa função mostrar dados atualizados? Eu pensei que o objetivo de usar uma função como essa seria sempre ter o alcance exato?
ClearCloud8 17/01

11
A solução usando getSheetValues ​​() é 20% mais rápida que usar getDataRange () com getValues ​​(). Testado com folha contendo 38k células.
Mark Witczak 20/03

11

Você pode usar A: Z ou A: AB ou A: XX (com XX sendo a última coluna da sua página):

Captura de tela do uso para aplicar formatação condicional a linhas com base no valor de uma única célula


11
Está morto: "Denk Mal Neu"? Como isso responde à pergunta?
Jacob Jan Tuinstra

11
Todo mundo aqui sabe como especificar um intervalo. Esta não era a questão.

3

O Planilhas Google não tem uma sintaxe de intervalo para todo o intervalo de folhas.

A fórmula a seguir retornará o endereço do intervalo de toda a planilha chamada Sheet1

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

Para usá-lo como referência, coloque-o dentro de INDIRECT. A fórmula a seguir retornará uma matriz de todos os valores na Planilha1.

= ArrayFormula (
  INDIRETO(
    "Folha1!"
    & ENDEREÇO ​​(1,1; VERDADEIRO)
    & ":"
    & ENDEREÇO ​​(LINHAS (Folha1! A: A), COLUNAS (Folha1! 1: 1); VERDADEIRO)
    ,
    VERDADE
  )
)

1

Não conheço uma específica, mas acho que você pode usar algumas fórmulas se não souber o número de linhas / colunas:

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

Aqui, Sheeté o nome da sua planilha e @é uma sequência arbitrária. Se a planilha selecionada estiver @em uma célula, ela não funcionará. Você pode substituí-lo por outro caractere se a planilha contiver essa célula.

O COUNITFaqui conta o número de linhas na coluna A: A não contém @, que deve ser tudo se não houver células que o contenham, e se INDIRECTtransforma Sheet!1:###(onde ###está o número de linhas) em um intervalo real selecionado.


Agradeço o esforço, mas, tanto quanto posso dizer, sua sugestão não oferece vantagens sobre a solução alternativa que mencionei na minha pergunta, mas tem as desvantagens de ser mais detalhada e exigir que o usuário insira um caractere que nunca estará presente na folha.
Sampablokuper

@sampablokuper Por ser detalhado, acho que não consigo encontrar uma solução para isso, pois na segunda parte eu esqueci algo que agora adicionei à minha resposta. Além disso, até onde posso ver, a vantagem que ela tem sobre sua solução atual é que você não precisa saber quantas linhas ou colunas a planilha possui. Mas sim, que é tão longe quanto ele ganha :( Talvez um pode fazer-se uma função de um script VBA.
Jerry

Obrigado, mas minha solução atual não exige que se saiba quantas linhas a planilha possui, nem quantas colunas ela possui, contanto que tenha <676 colunas.
Sampablokuper

1

As melhores respostas já foram dadas para aqueles que estão operando no appscript, mas se alguém por aí estiver trabalhando dentro do Planilhas Google, então aqui está uma abordagem que pode atender às suas necessidades:

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

Explicação : * Você está basicamente especificando o intervalo por meio de uma sequência concatenada com o número de linhas em worksheet_name!

Algumas vantagens dessa abordagem : * É 'dinâmico' ... se você adicionar linhas à parte inferior, o intervalo será ajustado de forma adequada. * Leve - você pode colocar isso em uma função importante / de consulta

Desvantagens : * Não tentei em todos os casos, portanto, pode funcionar apenas para casos de uso específicos. * Pessoalmente, tenho uma preferência por tornar as coisas dinâmicas / limpas, para que uma espécie de função personalizada seja um bom meio termo entre o appscript e essa abordagem leve.


1

Isso funciona para mim:

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

Utilizado em um script vinculado, combine o nome da planilha com um "!" e, em seguida, obtenha a notação A1 do intervalo de dados na planilha escolhida


0

Consegui selecionar a planilha inteira nomeando o intervalo como planilha sem o ponto de exclamação.

Eu tinha uma guia chamada data. Em vez de usar dados! ou dados! A1: ZZ.


Quando atribuímos um nome a um intervalo nomeado, uma referência de intervalo deve ser especificada. Qual faixa de referência você usou?
Rubén

-1

Para especificar a folha inteira como um intervalo, use:

worksheet_name!A1:ZZ

você pode experimentá-lo aqui: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/clear

ou se você usa Java (para limpar tudo na Planilha1):

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

ou se você quiser apenas usá-lo em uma fórmula (por exemplo: SUM) em outra planilha (por exemplo: Planilha2), poderá usar a seguinte referência:

=SUM(Sheet1!A1:ZZ)

^ isso somará todas as células existentes na Planilha1 e colocará o valor em uma célula na Planilha2, você pode encontrar o exemplo aqui: https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing . Neste exemplo, temos 3 colunas e 5 linhas na Planilha1, portanto, esta fórmula = SUM (Planilha1! A1: ZZ) seleciona todas elas. Você pode adicionar linhas ou colunas na Plan1 e esta solução ainda selecionará todas as células.

PS: se você votar na minha resposta - explique por que.


-2

Supondo que você saiba o número de linhas, é possível nomear a planilha inteira como "nome da planilha":

PASSOS:

  1. Selecione a planilha inteira
  2. Clique em 'Dados' -> 'Intervalos nomeados e protegidos'
  3. Digite "worksheet_name" para nomear a seleção e clique em Concluído.

Agora, sempre que você usar "nome da planilha" em uma função, ele fará referência à planilha inteira.


4
Seu método resultará em um intervalo "instantâneo". Adicionar colunas ou linhas não altera o intervalo nomeado !!
Jacob Jan Tuinstra
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.