2012-07-30 26 views
9

Google Sitemde bir Google Apps Komut Dosyası yazıyorum ve bir Google E-tablosunda 2 farklı sekmede sağlanan verileri kullanmaya çalışıyorum. Belgelerden anladığımı düşündüğümden, openById() yöntemini kullanarak bir Site komut dosyasına SpreadsheetApp sınıfındaki tüm kullanılabilir yöntemleri kullanabiliyordum. Neyse buradaGoogle Apps Komut Dosyası ile farklı Google E-tablosundaki verilere nasıl erişilir?

ben hatayı olsun

function doGet(e) { 

    var doc = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE).getActiveSheet(); 
    SpreadsheetApp.setActiveSheet(doc.getSheetId()[1]); 

    //.... 
} 

yapmaya çalıştığı budur

Cannot find method setActiveSheet(. (line 4)

Bu bağlantıyı devre dışı işimi çekiyorum: Storing Data in Google Spreadsheets ve ayrıca Ui Servis bölümü Bina altında listelenen Kullanıcı arayüzleri.

Bu iki satırda neyi yanlış yaptığımı gören var mı?

+1

Sözdizimi hatası ya da uygulanmayan yöntemleri kullanmaktan kaçınmak için komut dosyası düzenleyicinin otomatik tamamlama özelliğini kullanmanız önerilir ... bu, rahatsız edici hatalar ve/veya yazım hataları olmadan başlamanın kolay bir yoludur. ;-) –

cevap

18

setActiveSheet, yalnızca kullanıcı arabiriminiz tarafından görüntülenen e-tablo ile, tarayıcınızda açtığınız bir elektronik sayfadaki bir sayfa ile kullanılmalıdır.

SpreadsheetApp.openById ile kendi verilerine erişmek için bir elektronik tablo açıyorsunuz, ancak tarayıcınızda açılmıyor. Bir UI değil.

ben https://developers.google.com/apps-script/class_spreadsheetapp?hl=es-ES#openById bu açıklamalarda bulundu:

// The code below opens a spreadsheet using it's ID and gets the name for it. 
// Note that the spreadsheet is NOT physically opened on the client side. 
// It is opened on the server only (for modification by the script). 
var ss = SpreadsheetApp.openById("abc1234567"); 

Bazı örnekler sizin komut dosyası elektronik tabloya çalışan varsayalım. Bu sizin durumunuz değil, çünkü kendi Kullanıcı Arayüzüne sahip olması gereken bir servis olarak bir senaryo çalıştırıyorsunuz.

+1

Bu biraz hayal kırıklığı yaratıyor. Farklı sekmelerdeki verilere erişmek için daha sonra e-tablo içinde çalışmayan bir hizmet aracılığıyla bir yol biliyor musunuz? – Mathitis2Software

+1

sadece getSheetByName ('sayfanın adı') 'nı kullanın, varsayılan olarak' Sheet1 'ismini değiştirmediyseniz ya da ingilizceyi kullanmıyorsanız, örneğin Fransızca' varsayılan değer 'Feuille1' –

+1

getSheets() olacaktır E-tablodaki tüm sayfalara bir dizi getirin. –

1

Bu iki satırda en az bir sorun var. Birincisi, setActiveSheet yöntem parametrelerinin bir Sheet sınıfı nesnesi olması ve getSheetId yönteminin bir tamsayı değeri döndürmesidir. Bu yöntemle (getSheetId) not documented şeklindedir. SpreadsheetApp etkin bir elektronik tablo yoksa, ikinci sorun oluşabilir. Bu durumda "Lütfen önce aktif bir elektronik tablo seçin." hata. Etkin bir elektronik tablo ayarlamak için SpreadsheetApp.setActiveSpreadsheet yöntemini kullanın.

0

Her sayfaya ayrı olarak erişmeniz gerekir.

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE); 
var sheet = ss.getSheets()[0]; // "access data on different tabs" 
ss.setActiveSheet(sheet); 
+1

"Farklı sekmelerdeki verilere erişmek için Elektronik Tablonun içinde çalışmayan bir hizmet aracılığıyla bir yol biliyor musunuz?" var sheet1 = ss.getSheets() [0]; –

+0

Tek başına hizmet aracılığıyla bu yönteme erişimim yok gibi görünüyor. GetSheetID(), getSheetName() ve getSheetValues ​​() – Mathitis2Software

4

Ben megabyte1024 sözdizimi hatalarını giderir @ düşünüyorum, ama cevap @YoArgentina için Yorumunuza:

Do you happen to know of a way to access data on different tabs then through a service not running inside the Spreadsheet?

bu tür yardımlarda mu?

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE); 
var sheets = ss.getSheets(); 
// the variable sheets is an array of Sheet objects 
var sheet1A1 = sheets[0].getRange('A1').getValue(); 
var sheet2A1 = sheets[1].getRange('A1').getValue(); 
+0

kullanması gibi görünüyor. GetSheets() gibi bir Spreadsheet komut dosyasının dışında erişilebilir değil gibi görünüyor. => TypeError: Object Sheet içinde getSheets işlevi bulunamıyor. (satır 4) – Mathitis2Software

+1

Orijinal postanızda olduğu gibi "var doc = SpreadsheetApp.openById (SPREADSHEET_ID_GOES_HERE) .getActiveSheet();" kullanarak _not_ olduğunuzdan emin misiniz? Bu yazıdaki kodla, 'ss bir Sayfa Nesnesi değil, bir Spreadsheet nesnesi olmalıdır. – AdamL

+0

Evet,% 100 doğru sizsiniz. Bunu tamamen özledim. Çok teşekkürler. – Mathitis2Software

İlgili konular