it-swarm.asia

Google Apps Komut Dosyasında genel değişken nasıl tanımlanır

Google’dan en çok örnek görüyorum ki, yalnızca dev bir komut dosyasında işlevlerini kullanıyorlar. 

Örneğin. https://developers.google.com/apps-script/quickstart/macros

Ancak tarzımızda, tüm fonksiyonları genellikle tek bir ad altında, örneğin

MyCompany = (MyCompany || {});
MyCompany.init = function () {
    Logger.log('init');  
};

function onOpen() {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var menus = [{
        name: "Init",
        functionName: MyCompany.init
    }];
    spreadsheet.addMenu("Test", menus);
};

Ancak, yukarıdaki kodu çalıştırdığımda geri dönüyor

"MyCompany is not defined."

Nasıl çözülür?

28
Ryan

Bunları bir tür kalıcı global değişken olarak kullanabildiğiniz için Properties Service kullanmaktan daha iyi olabilirsiniz.

bir anahtar değeri ayarlamak için 'dosya> proje özellikleri> proje özellikleri'ni tıklayın veya kullanabilirsiniz. 

PropertiesService.getScriptProperties().setProperty('mykey', 'myvalue');

Veri ile alınabilir 

var myvalue = PropertiesService.getScriptProperties().getProperty('mykey');

67
AshClarke

GAS'ta global değişkenler diğer dillerde oldukları gibi değildir. Sabitler veya tüm rutinlerdeki değişkenler değildir.

Global değişkenleri fonksiyonlar arasındaki tutarlılık ve verimlilik için de kullanabileceğimi düşündüm. Ama bazı insanlar tarafından SO de belirtildiği gibi yanılmışım.

Genel değişken, bir komut dosyasının her uygulamasında değerlendirilir; bu nedenle uygulamanızı her çalıştırışınızda yalnızca bir kez değil.
Global değişkenler bir komut dosyasında değiştirilebilir (bu yüzden bunlar kazayla değiştirilemeyecek olan sabitler değildir), ancak başka bir komut dosyası çağrıldığında yeniden başlatılacaktır.
Global değişkenleri kullanmanın da hızlı bir cezası var. Bir fonksiyonun içinde aynı global değişkeni iki veya daha fazla kullanırsanız, yerel bir değişken atamak ve onu kullanmak daha hızlı olacaktır. 

Değişkenleri uygulamanızdaki tüm işlevler arasında korumak istiyorsanız, bir cacheService kullanıyor olabilir. Bir sürücüdeki tüm dosya ve klasörler arasında dolaşmanın çok zaman alacağını öğrendim. Ancak, dosyalar ve klasörler hakkındaki bilgileri önbellekteki (veya hatta özellikleri) saklayabilir ve en az 100 kez hızlandırabilirsiniz.

Şimdi global değişkenleri kullanmamın tek yolu bazı önekler ve widget'ları adlandırmak.

3
SoftwareTester

Global değişkenler kesinlikle GAS'ta mevcuttur, ancak ortamın istemci/sunucu ilişkisini doğru kullanabilmeniz için anlamalısınız - lütfen bu soruya bakın: Google Script'teki genel değişkenler (e-tablo)

Ancak bu kodunuzla ilgili bir sorun değil; Belgeler, menü tarafından yürütülecek işlevin yönteme bir dizge olarak sunulması gerektiğini belirtir, şu anda işlevin çıktısını veriyorsunuz: https://developers.google.com/apps- script/reference/elektronik tablo/elektronik tablo # addMenu% 28String, Nesne% 29

function MainMenu_Init() {
    Logger.log('init');  
};

function onOpen() {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var menus = [{
        name: "Init",
        functionName: "MainMenu_Init"
    }];
    spreadsheet.addMenu("Test", menus);
};
1
Tim

Bunu kullanıyorum: eğer var bildirirseniz x = 0; İşlev bildirimlerinden önce, değişken tüm kod dosyaları için çalışır, ancak değişken, elektronik tablodaki bir hücreyi her düzenlediğinizde bildirilir