Sayfanın tamamını Google E-Tablolarda nasıl aralıklarla belirtebilirim?


27

Şimdiye kadar bulduğum en iyi geçici çözüm:

worksheet_name!$A$1:$YY

ama ideal olarak basitçe yazabilmek istiyorum, örneğin:

worksheet_name!

Peki, kimse biliyor mu: bir bütün sayfayı aralık olarak belirtmek için bir sözdizimi var mı?

Yanıtlar:


10

İşi sizin için yapmak için küçük bir Google Apps Komut Dosyası (GAS) pasajı oluşturdum.

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

Elektronik tablo menüsünde, Araçlar> Komut Dosyası düzenleyici'yi seçin ve kodu ekleyin. Hata düğmesine bastığınızdan emin olun:
görüntü tanımını buraya girin

kullanım

=sheetRange("sheetName",int)

intSeçeneği açıklamalar bölümünde açıklandığı gibi kullanın .

Örnek

Size bir örnek dosya yarattım: Range olarak Sheet

Uyarılar

Bu durumda, bir e-tablodaki bir aralığı GAS aracılığıyla belirlemenin iki yolu vardır:

  1. int=1; Via getDataRangeyöntemle. Bu, son sütunun içinde veri bulunan sütun olduğu bir aralık alır. Aynı satır sayısı için hesaplar. Bu genellikle en basit yoldur. Örnek dosyadaki ikinci sayfaya bakınız.
  2. int=2; Via getSheetValuesyöntemle. Bu bir "WYSIWYG" aralığı alacaktır. Örnek dosyadaki üçüncü sayfaya bakınız.
  3. Bu tür özel işlevlerin yenileme oranları hemen gerçekleşmez, bu yüzden lütfen sabırlı olun. Verilerin yenilenmesi birkaç saat sürebilir.

Referanslar


Bu işlevin yenilenen verileri göstermesi neden birkaç saat alıyor? Bunun gibi bir işlevi kullanmanın her zaman doğru aralığa sahip olacağını düşünmüştüm?
ClearCloud8

1
GetSheetValues ​​() kullanan çözüm, getDataRange () öğesini getValues ​​() ile kullanmaktan% 20 daha hızlıdır. 38k hücreleri içeren tabaka ile test edilmiştir.
Mark Witczak

11

A: Z veya A: AB veya A: XX kullanabilirsiniz (XX, sayfanızın son sütunu olur):

Tek bir hücrenin değerini temel alarak satırlara koşullu biçimlendirme uygulamak için bunun ekran görüntüsü


1
Öldü: "Denk Mal Neu"? Bu soruya nasıl cevap veriyor?
Jacob Jan Tuinstra

1
Buradaki herkes bir aralık belirtmeyi biliyor. Soru bu değildi.

3

Google Sayfaların, tüm sayfa aralığı için bir aralık sözdizimi yok.

Aşağıdaki formül Sayfa1 adındaki tüm sayfanın aralık adresini döndürür

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

Referans olarak kullanmak için, INDIRECT'in içine koyun. Aşağıdaki formül Sayfa1'deki tüm değerlerin bir dizisini döndürecektir.

= ARRAYFORMULA (
  DOLAYLI(
    "Sayfa1!"
    Ve ADRES (1,1,, TRUE)
    & ":"
    & ADRESİ (ROWS (Sayfa1 A:! A) KOLONLAR (Sayfa1 1:! 1) ,, DOĞRU)
    ,
    DOĞRU
  )
)

1

Belirli bir tane bilmiyorum, ancak satır / sütun sayısını bilmiyorsanız bazı formüller kullanabileceğinizi düşünüyorum:

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

İşte, Sheetsayfa adınız ve @rastgele bir dizedir. Seçtiğiniz sayfa @bir hücrede ise, çalışmaz. Sayfa böyle bir hücre içeriyorsa, onu başka bir karakterle değiştirebilirsiniz.

COUNITFBurada A sütununda satır sayısını sayar A içermeyen @bunu içeren bir hücre olup eğer tüm olması gereken ve INDIRECTdönüşümler Sheet!1:###(burada ###gerçek bir seçilen bir aralığı içine satır sayısı).


Çabalarını takdir ediyorum, ancak söyleyebildiğim kadarıyla, öneriniz benim sorumla bahsettiğim geçici çözümden daha fazla avantaj getirmiyor, ancak daha ayrıntılı olmasının ve kullanıcının hiç bulunamayacak bir karakter girmesini gerektirmesinin dezavantajları var Sayfada.
sampablokuper

@sampablokuper Ayrıntılı olarak, bunun için bir çözüm bulabileceğimi sanmıyorum, ikinci kısımda olduğu gibi, şimdi cevabımı eklediğim bir şeyi göz ardı ettim. Ayrıca, görebildiğim kadarıyla, mevcut geçici çözümünüz üzerindeki avantajı, sayfanın kaç satır veya sütun içerdiğini bilmenize gerek olmamasıdır. Ama evet, mümkün olduğu kadarıyla :( Belki de biri VBA senaryosundan bir fonksiyon oluşturabilir
Jerry

Teşekkürler, ancak mevcut geçici çözümüm, sayfanın kaç satır olduğunu, ne de <676 sütun olduğu sürece ne kadar sütunu olduğunu bilmek istemiyor.
sampablokuper

1

Appscript içinde çalışanlar için en iyi cevaplar zaten verildi, ancak dışarıdaki herhangi biri Google E-Tablolar içinde düzgün çalışıyorsa, işte gereksinimlerinize uyan bir yaklaşım:

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

Açıklama : * Esas olarak, çalışma sayfasındaki_adı satır sayısıyla birleştirilmiş bir dize aracılığıyla aralığı belirtiyorsunuz !

Bu yaklaşımın bazı avantajları : * 'Dinamik' ... tabana satır eklerseniz, aralık buna göre ayarlanacak * Hafif - bunu bir importrange / query işlevine tokatlayabilirsiniz.

Dezavantajları : * Her durumda hiç denemedim, bu yüzden sadece belirli kullanım durumlarında işe yarayabilir * Kişisel olarak işleri dinamik / temiz yapma tercihim var, bu yüzden türlerin özel bir işlevi, uygulama ile bu hafif yaklaşım arasında iyi bir orta yol olacaktır.


1

Bu benim için çalışıyor:

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

Sınırlı bir komut dosyasında kullanılırsa, sayfa adını "!" İle birleştirin ve ardından seçilen sayfada veri aralığının A1 notasyonunu alın.


0

Tüm sayfayı, ünlem işareti hariç, sayfa olarak adlandırarak seçebildim.

Veri adında bir sekme vardı. Veri kullanmak yerine! veya veri! A1: ZZ.


Adlandırılmış bir aralığa bir ad atadığımızda, bir aralık başvurusu belirtilmelidir. Hangi referans aralığını kullanıyorsunuz?
Rubén,

-1

Sayfanın tamamını aralık olarak belirtmek için lütfen aşağıdakileri kullanın:

worksheet_name!A1:ZZ

Burada deneyebilirsiniz: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/clear

veya Java kullanıyorsanız (Sayfa1'deki her şeyi silmek için):

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

ya da sadece başka bir sayfada (örneğin: Sayfa2) bir formülde kullanmak istiyorsanız (örneğin: TOPLA) aşağıdaki referansı kullanabilirsiniz:

=SUM(Sheet1!A1:ZZ)

Bu Sayfa1 mevcut tüm hücreleri toplamak ve Sayfa2 bir hücredeki değeri koyacağız ^, buradan örnek bulabilirsiniz https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing . Bu örnekte Sayfa1'de 3 sütun ve 5 satır var, bu nedenle bu formül = SUM (Sayfa1! A1: ZZ) hepsini seçer. Sayfa1'de satır veya sütun ekleyebilirsiniz; bu çözüm hala tüm hücreleri seçecektir.

Not: Aşağıya cevabımı oyla - lütfen nedenini açıkla


-2

Satır sayısını bildiğinizi varsayarak, sayfanın tamamını "çalışma sayfası_adı" olarak adlandırabilirsiniz:

ADIMLAR:

  1. Tüm çalışma sayfasını seçin
  2. 'Veri' -> 'Adlandırılmış ve Korumalı Aralıkları' tıklayın
  3. Seçimi adlandırmak için "worksheet_name" yazın ve Done tıklayın.

Şimdi bir fonksiyonda "çalışma sayfası_adı" nı her kullandığınızda, çalışma sayfasının tamamına referans olacaktır.


4
Yönteminiz bir "anlık görüntü" aralığı ile sonuçlanacaktır. Hem sütun hem de satır eklemek, adlandırılmış aralığı değiştirmez!
Jacob Jan Tuinstra
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.