Jak określić cały arkusz jako zakres w Arkuszach Google?

27

Najlepsze obejście, jakie do tej pory znalazłem, to:

worksheet_name!$A$1:$YY

ale idealnie chciałbym móc po prostu pisać, np .:

worksheet_name!

Czy ktoś wie: czy istnieje składnia określająca cały arkusz jako zakres?

sampablokuper
źródło

Odpowiedzi:

10

Stworzyłem mały fragment Google Apps Script (GAS), aby wykonać pracę za Ciebie.

Kod

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

W menu arkusza kalkulacyjnego wybierz Narzędzia> Edytor skryptów i dodaj kod. Pamiętaj, aby nacisnąć przycisk błędu:
wprowadź opis zdjęcia tutaj

Stosowanie

=sheetRange("sheetName",int)

Użyj intopcji opisanej w uwagach.

Przykład

Utworzyłem przykładowy plik: Arkusz jako zakres

Uwagi

W takim przypadku istnieją dwa sposoby ustalenia zakresu w arkuszu kalkulacyjnym za pomocą GAS:

  1. int=1; Poprzez getDataRangemetody. Spowoduje to pobranie zakresu, w którym ostatnia kolumna zawiera dane. Te same konta dla liczby wierszy. Jest to zazwyczaj najprostsza trasa. Zobacz drugi arkusz w przykładowym pliku.
  2. int=2; Poprzez getSheetValuesmetody. Spowoduje to pobranie zakresu „WYSIWYG”. Zobacz trzeci arkusz w przykładowym pliku.
  3. Częstotliwości odświeżania tego rodzaju funkcji niestandardowych nie są natychmiastowe, więc prosimy o cierpliwość. Odświeżenie danych może potrwać kilka godzin.

Referencje

Jacob Jan Tuinstra
źródło
Dlaczego wyświetlenie odświeżonych danych zajmie kilka godzin? Myślałem, że cały sens używania takiej funkcji to zawsze mieć dokładny zasięg?
ClearCloud8
1
Rozwiązanie wykorzystujące getSheetValues ​​() jest o 20% szybsze niż użycie getDataRange () z getValues ​​(). Testowany z arkuszem zawierającym 38k komórek.
Mark Witczak
11

Możesz użyć A: Z lub A: AB lub A: XX (gdzie XX jest ostatnią kolumną strony):

Zrzut ekranu przedstawiający zastosowanie tego formatu do zastosowania formatowania warunkowego do wierszy na podstawie wartości pojedynczej komórki

Stefan Denk
źródło
1
I umiera: „Denk Mal Neu”? Jak to odpowiada na pytanie?
Jacob Jan Tuinstra
1
Wszyscy tutaj wiedzą, jak określić zakres. To nie było pytanie.
3

Arkusze Google nie mają składni zakresu dla całego zakresu arkuszy.

Poniższa formuła zwróci adres zakresu całego arkusza o nazwie Arkusz1

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

Aby użyć go jako odniesienia, umieść go wewnątrz opcji POŚREDNIE. Poniższa formuła zwróci tablicę wszystkich wartości w Arkuszu1.

= ArrayFormula (
  POŚREDNI(
    „Arkusz1!”
    I ADRES (1,1; PRAWDA)
    & „:”
    I ADRES (RZĘDY (Arkusz1! A: A), KOLUMNY (Arkusz1! 1: 1) ,, PRAWDA)
    ,
    PRAWDZIWE
  )
)
Ruben
źródło
1

Nie znam konkretnego, ale myślę, że możesz użyć niektórych formuł, jeśli nie znasz liczby wierszy / kolumn:

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

Tutaj Sheetjest nazwa twojego arkusza i @jest to dowolny ciąg. Jeśli wybrany arkusz ma @jedną komórkę, nie będzie działać. Możesz go zastąpić innym znakiem, jeśli arkusz zawiera taką komórkę.

COUNITFTutaj zlicza liczbę wierszy w kolumnie A: nie zawierająca @, które powinny być wszystkie, jeśli nie ma komórek zawierających je, i INDIRECTtransformuje Sheet!1:###(tam, gdzie ###jest liczbą wierszy) do rzeczywistego zakresu.

Nocnik
źródło
Doceniam wysiłek, ale o ile mogę stwierdzić, twoja sugestia nie przynosi żadnych korzyści w porównaniu z obejściem, o którym wspomniałem w moim pytaniu, ale ma wady polegające na tym, że jest bardziej szczegółowy i wymaga od użytkownika wprowadzenia znaku, który nigdy nie będzie obecny. w arkuszu.
sampablokuper
@sampablokuper Jako że jest to gadatliwe, nie sądzę, że mogę znaleźć na to rozwiązanie, ponieważ w drugiej części przeoczyłem coś, co teraz dodałem do mojej odpowiedzi. Ponadto, o ile widzę, przewaga nad obecnym obejściem polega na tym, że nie trzeba wiedzieć, ile wierszy lub kolumn ma arkusz. Ale tak, to tyle, na ile to możliwe :( Być może można utworzyć funkcję ze skryptu VBA.
Jerry
Dzięki, ale moje obecne obejście nie wymaga, aby wiedzieć, ile wierszy ma arkusz, ani ile kolumn ma, o ile ma <676 kolumn.
sampablokuper
1

Najlepsze odpowiedzi zostały już podane dla tych, którzy działają w ramach skryptu aplikacji, ale jeśli ktoś tam działa w ramach Arkuszy Google, oto podejście, które może pasować do twoich potrzeb:

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

Objaśnienie : * Zasadniczo określasz zakres za pomocą łańcucha, który jest powiązany z liczbą wierszy w nazwie arkusza roboczego !

Niektóre zalety tego podejścia : * Jest „dynamiczny” ... jeśli dodasz wiersze do dołu, zakres odpowiednio się dostosuje * Lekki - możesz spoliczkować to w funkcję importrange / query

Wady : * Nie wypróbowałem go we wszystkich przypadkach, więc może działać tylko w określonych przypadkach użycia * Osobiście wolę, aby rzeczy były dynamiczne / czyste, więc niestandardowa funkcja byłaby dobrym pośrednikiem między skryptem aplikacji a tym lekkim podejściem

JTopsalot
źródło
1

To działa dla mnie:

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

W nazwie skryptu połącz nazwę arkusza z „!” a następnie pobierz notację A1 zakresu danych na wybranym arkuszu

Metryczny szczur
źródło
0

Byłem w stanie wybrać cały arkusz, nazywając zakres jako arkusz bez wykrzyknika.

Miałem zakładkę o nazwie dane. Zamiast korzystać z danych! lub dane! A1: ZZ.

ajon
źródło
Kiedy przypisujemy nazwę do nazwanego zakresu, należy podać odwołanie do zakresu. Z jakiego zakresu referencyjnego korzystałeś?
Rubén
-1

Aby określić cały arkusz jako zakres, użyj:

worksheet_name!A1:ZZ

możesz spróbować tutaj: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/clear

lub jeśli używasz Java (aby wyczyścić wszystko w Arkuszu1):

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

lub jeśli chcesz po prostu użyć go w formule (na przykład: SUMA) na innym arkuszu (na przykład: Arkusz2), możesz użyć następującego odniesienia:

=SUM(Sheet1!A1:ZZ)

^ to zsumuje wszystkie istniejące komórki na Arkuszu1 i umieści wartość w komórce na Arkuszu 2, możesz znaleźć przykład tutaj: https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing . W tym przykładzie mamy 3 kolumny i 5 wierszy na Arkuszu1, więc ta formuła = SUMA (Arkusz1! A1: ZZ) wybiera wszystkie z nich. Możesz dodać wiersze lub kolumny do arkusza 1, a to rozwiązanie nadal wybierze wszystkie komórki.

PS: jeśli głosujesz w dół moją odpowiedzią - wyjaśnij dlaczego.

Maksym Ovsianikov
źródło
-2

Zakładając, że znasz liczbę wierszy, możesz nazwać cały arkusz jako „nazwa arkusza roboczego”:

KROKI:

  1. Wybierz cały arkusz
  2. Kliknij „Dane” -> „Nazwane i chronione zakresy”
  3. Wpisz „nazwa arkusza roboczego”, aby nazwać wybór i kliknij Gotowe.

Teraz za każdym razem, gdy użyjesz „nazwa arkusza roboczego” w funkcji, będzie ona odnosić się do całego arkusza roboczego.

TheJKFever
źródło
4
Twoja metoda spowoduje powstanie zakresu „migawki”. Dodanie obu kolumn lub wierszy nie zmieni nazwanego zakresu !!
Jacob Jan Tuinstra