Google E-Tablolar'ın başka bir sayfaya referansı otomatik olarak güncellemesini nasıl sağlayabilirim?


20

Bir Google E-Tablosuna veri girmek için harici bir uygulama kullanıyorum. Bu çalışma kitabına daha sonra IMPORTRANGE(spreadsheet_key, range_string)verileri işleyen ve yorumlayan ayrı bir çalışma kitabı ( işlevli) tarafından başvurulur . Benim sorunum, başvurulan çalışma kitabını kişisel olarak değiştirdiğimde, başvuru çalışma kitabının iyi şekilde güncelleştirildiğini, ancak harici uygulama her değiştirdiğinde güncelleştirilmemesidir.

Yeniden hesaplama her dakika ve her değişiklik yapılır böylece "Elektronik Tablo ayarları" düzenlemeyi denedim. Ayrıca, Google Chrome'a ​​sayfayı her saat otomatik olarak yenileyen bir uzantı yükledim. Ancak, veriler başvurulan çalışma kitabından yeniden alınmaz. Formülü yeni bir hücreye kopyalasam bile veriler tekrar içe aktarılmaz.

Google E-Tablolar'ın verileri yeniden içe aktarmasını tetiklemek için referans çalışma kitabında yapabileceğim bir şey var mı?

Düzenleme: Sadece açık olmak gerekirse, ben şu anda içinde harici bir uygulama tarafından girilen veri ile bir çalışma kitabı var ("kaynak sayfası" olarak adlandırın) ve içinde bir IMPORTRANGEişlevi olan başka bir çalışma kitabı ("başvuru sayfası" olarak adlandırın). IMPORTRANGE"Referans sayfası" nda fonksiyon tarafından gösterilen veriler, "kaynak sayfayı" en son kişisel olarak düzenlediğimden, harici uygulama tarafından girilen verileri içermez. Ayrıca, her iki çalışma kitabı da yeni Google E-Tablolar'ı kullanıyor.

Düzenleme: Ayrıca, bu soru Google E-Tablolar'daki bir hücreyi başka bir belgedeki bir hücreye nasıl bağlarım? çünkü bir e-tablodan veri almak için bu sorunun çözümü olarak verilen işlevi kullanıyorum. Sorun, verilerin nasıl içe aktarılacağı değil, verilerin kaynağının nasıl güncelleneceği. Benim varsayımım, Google'ın benim için bununla ilgileneceğidir, ancak "referans sayfası" ndaki veriler güncellenmez ve güncellemeyi almanın tek yolu fiziksel olarak "kaynak sayfasına" girmektir. "ve kendim düzenleyin.


Nasıl çalıştığının ayrıntılarının farkında değilim, ancak aşağıdakileri kullanıyorum: ifttt.com/google_drive
tlewis3348

@pnuts "Doğru sürümün kaynak olarak kullanılmasını sağlayarak" ne demek istediğinizi açıklayabilir misiniz? Her iki sayfanın ayarını her dakika güncelleyecek şekilde ayarladım ve sekmeler her dakika yenilenecek şekilde ayarlandı. Kaynağı nasıl, nerede ve hangi sayfada güncelleyebilirim?
tlewis3348

@pnuts Veriler separate workbookiyi görünüyor. Tüm görünümlerden, sadece
girilmiş

Evet, bu yeni Google E-Tablolar. Bir çalışma kitabı eklenen verileri gösterir, diğer çalışma kitabı göstermez. Bunu açıklığa kavuşturmak için orijinal soruya ekleyeceğim.
tlewis3348

Yanıtlar:


14

Ben de aynı sorunla mücadele ediyorum. Bunun yerine özel bir işlev yazma, ben farklı bir sorgu dizesi eklemek spreadsheet_urliçinde IMPORTRANGEsayfa yenilenir her zaman Google, yeni bir e-tablodan veri getirmesi gerektiğini düşündüğü umuduyla. URL'yi her seferinde benzersiz kılmak için yeni bir zaman damgası ekliyorum. Bu açık bir saldırı, ama benim için pek çok sayfa üzerinde çalışıyor.

Formülüm daha önce şuna benziyordu:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/123123123123/edit#gid=1816927174","'Sheet1'!A1:B25")

Ve şimdi şöyle görünüyor:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/123123123123/edit#gid=1816927174"&"?"&now(),"'Sheet1'!A1:B25")

Güncelleme:

Google artık now()içeride izin vermediğinden bu yöntem artık çalışmaz importrange(). Aşağıdaki Hugh'un yorumuna bakın.


6
Aynı cevabı yapmaya çalışırken bu cevaba rastladım. Google bunu yapmış gibi görünüyor ki şimdi (), rand () ve randbetween () bir importrange () çağrısında kullanılamaz.
Hugh

E-tabloyu her dakika güncellenecek şekilde ayarlarsam formül de yenilenir ve yeni veriler getirir (varsa)?
Nikhil Sahu

5

Bu Web Uygulamaları yanıtında Jimmy'den aşağıdakiler gelir .

  1. Her iki e-tabloda =now()da rastgele bir hücreye bir denklem ekleyin ,Z1
  2. Her iki e-tabloya diğer e-tablonun işlevine =importrange()başvuran bir işlev ekleyin now.
  3. E-tablo ayarlarınıza gidin ve her dakika yeniden hesaplamayı seçin.

=now()Belirli aralıklarla rastgele metin eklemek için işlev, bu iş parçacığındaki URL hilesi veya Apps Komut Dosyası da dahil olmak üzere birçok öneri denedim , ancak hiçbir şey kaynak sayfasının manuel olarak düzenlenmesi dışında içe aktarılmaya zorlanamaz.


Aralık 2018'de benim için çalıştı
MalcolmOcean

4

En kolay yolun ifçevresine basit bir açıklama koymak olduğunu buldum importrange.

B1 = Sheet ID
B2 = Sheet Name and Range
B3 = Now()
=if (B3> now()-1, IMPORTRANGE(B1,B2),)

Bu her seferinde işe yarar.


Çözümünüzü uygulamaya çalışıyorum, ancak B3'ü nasıl kullanacağım belirsiz. B3 = Şimdi () öyleyse diyorsunuz=if (Now() > now()-1, IMPORTRANGE(B1,B2),)
Eugene van der Merwe

3

Tarih damgası geçici çözümü benim için çalışmıyor gibi görünüyor - tarih damgaları ve rand işlevlerinin kullanılmasına izin verilmediğine dair açık bir not var.

Benim çok haksız geçici çözüm hücreyi silmek ve sonra ctrl + z tuşlarına basmaktır. Her seferinde bir yenileme zorlar. Bu onopen komut dosyasını veya verileri güncel tutmak için belirli zaman aralıklarında komut dosyası yazmak önemsizdir.


2

Manuel bir hücre güncellemesini simüle etmek ve harici bir e-tabloda değişiklikleri başlatmak için basit bir kesmek buldum.

  1. Bunun gibi özel bir işlev oluşturuldu:

    // Hack function used just to simulate a manual update
    function hack(value) {
      var list = []
      list.push(value);
      return list;
    }
    
  2. Sonra, benim kağıda bu şekilde diyorum:

    =arrayformula(hack(tab!B1))
    

    tab!B1kod ile değiştirdiğim hücrelerden biri nerede .


Bu, manuel hücre güncellemesini nasıl simüle eder?
haemse

2

VEYA ... önce cero (0) değerini veren ve sonra formülü geri ekleyen basit bir komut dosyası yapabilirsiniz ve bu hile yapar:

  var cell = sheet.getRange("B1:B1"); //SHEET TO INSERT VALUE
  cell.setFormula("=0");
   Utilities.sleep(2000); //JUST TO GIVE TIME TO UPDATE (OPTIONAL)
  var cell = sheet.getRange("B1:B1");
  cell.setFormula("=ImportRange(\"YOUR_SHEET_ID\",\"RANGE_TO_INSERT\")");  

daha da iyi olur cell.setFormula ("=" & cell.getValue ()) ;, kullanıcı 2 saniye boyunca sıfır
görmez

1

Özel bir işleve sahip bir Apps Script kullanarak sorunumu ( burada ayrıntılı olarak ) çözmenin bir yolunu bulabildim .

Eğer değiştirirseniz =IMPORTRANGE(spreadsheet_url, range_string)ile e-tablonuzda =DynamicImportRange(spreadsheet_url, sheet_name, range)ve Araçlar içine aşağıdaki kodu yapıştırın -> Script Editor -> Boş Proje, işe (görmelisiniz bu uygulamalar komut dosyalarını yazma hakkında daha fazla bilgi için).

/**
Usage: =DynamicImportRange(spreadsheet_url, sheet_name, range)
Compare to: =IMPORTRANGE(spreadsheet_url, range_string)

Where the given arguments are placeholders that should be replaced
by arguments specific to your use-case.
 */
function DynamicImportRange(sheet_url, sheet_name, sheet_range) {
  var values = SpreadsheetApp.openByUrl(sheet_url).getSheetByName(sheet_name).getRange(sheet_range).getValues();
  return values
};

/**
*/
function RefreshSheet() {
  // Update the following two variables to suit your particular situation
  var sheet_name = "sample_sheet_sheet"
  var range = "A1"

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet_name);
  var formula1 = "Loading...";
  var formula2 = sheet.getRange(range).getFormula().toString().replace('"', '\"');
  // The following assumes that the data is being inserted into the sheet in the same
  // location as it is in in the source sheet.
  var form_range = formula2.split(",")[2].split("\"")[1];
  sheet.getRange(form_range).clear();
  sheet.getRange(range).setValue(formula1);
  Utilities.sleep(245);
  sheet.getRange(range).setValue(formula2);
};

Sayfanın düzenli olarak güncellenmesini istiyorsanız, Uygulamalar Komut Dosyası penceresinde Kaynaklar -> Mevcut projenin tetikleyicileri bölümüne giderek bir tetikleyici ayarlayabilirsiniz.


4
TÜM GOOGLERLER İÇİN BURAYA SONLANDIRIN : e-tablo özel işlevleri SpreadsheetApp.openById()veya kullanarak diğer e-tabloları açamaz (artık) SpreadsheetApp.openByUrl(). Burada ve burada
Francesco Vadicamo

1

now()Birlikte gösterim için bir geçici çözüm olarak, e-tablonun ayarlarını her saat güncellenecek şekilde değiştirebilirsiniz.

Dosya -> Elektronik Tablo Ayarları -> Hesaplama

" Değişiklik ve her saat " veya "Değişiklik ve her dakika" üzerinde kendini yeniden hesaplamak için sayfayı güncelleyin . Unutmayın, her dakika Yeniden hesaplamayı seçmek e-tabloyu kapatabilir.


0

Referansınızı başka bir sayfadan otomatik olarak güncellemek için Google E-Tablolar eklenti Sheetgo'yu kullanabilirsiniz. Ayda 30 güncellemeyi ücretsiz olarak kullanabilir veya daha fazla güncelleme için ücretli abonelik alabilirsiniz. Bu video size temel kullanımı açıklamalıdır.


2
Unutmayın ki " Akıllı Ücretsiz Yükleme " sitesinde akıllıca belirtilmiş olmasına rağmen, bir sınırlı ücretsiz planın ardından 3 ücretli olan eklentidir . Fiyatlandırma sayfasına bağlantı yalnızca sitenin en altında bulunur.
marikamitsos
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.