2013-05-31 100 views
0

另一個GAS問題。我閱讀了關於ScriptProperties和批量設置屬性的文檔,以及(再次)瞭解有關best practices的文檔。但是,我對Javascript並不熟悉,對於GAS還不熟悉,因此我一直在API調用的速率限制內運行。Google Apps腳本批量設置屬性

基本上,我想從電子表格中'獲取'所有這些屬性,將它們放入數組或對象中,然後批量設置所有這些屬性。我有正確的鍵和值,我只是不知道如何臨時存儲它們在一個JS對象或數組或一些數據類型,將被setProperties(Object)方法接受。

下面是當前代碼(可怕Sleep定時器是工作...唯一的事情):

function setSubsequentProperties(propertyRange, sheet) { 

    // Get the other Library Properties based on the new Range values. 
    // propertyRange is the 2-column 1-row Range for the key/value pairs 
    var tableRange = ScriptProperties.getProperty(propertyRange); 
    var dataRange = sheet.getRange(tableRange); 
    var data = dataRange.getValues(); 

    // Create a 'properties' Object for bulk-setting to prevent overusing API calls 
    //var properties = new Array(data.length); 

    // Set a new Script Property for each row 
    for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var propertyKey = row[0]; 
    var propertyValue = row[1]; 

    // var myObject = allMyPropertiesInOneObject 

    ScriptProperties.setProperty(propertyKey, propertyValue); 
    Utilities.sleep(1000); 
    } 
// setProperties(myObject); 
} 

如何我可能會去添加propertyKeypropertyValue到對象批量設置它們都在一旦?僞代碼在代碼塊中被註釋掉。

回答

2

既然您說您剛接觸Javascript,那麼我認爲您還是JSON的新手。確實有一個ScriptProperties.setProperties()方法將JSON對象作爲參數。

修改代碼剛剛的setProperty()位,這裏是你可以做

function setSubsequentProperties(propertyRange, sheet) { 

    // Get the other Library Properties based on the new Range values. 
    // propertyRange is the 2-column 1-row Range for the key/value pairs 
    var tableRange = ScriptProperties.getProperty(propertyRange); 
    var dataRange = sheet.getRange(tableRange); 
    var data = dataRange.getValues(); 

    // Create a 'properties' Object for bulk-setting to prevent overusing API calls 
    //var properties = new Array(data.length); 

    // Set a new Script Property for each row 
    var myObject = {} ; 
    for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var propertyKey = row[0]; 
    var propertyValue = row[1]; 

    // var myObject = allMyPropertiesInOneObject 
    myObject[propertyKey] = propertyValue; 

    } 
    ScriptProperties.setProperties(myObject); 
} 
+0

這是一些該死的非常簡單的文檔!我看了一下,理解了更多的Javascript,並且還獲得了JSON對象設置批量參數的功能!至少可以說,斯里克你真了不起。我非常感謝你在我的GAS問題上給予我的所有幫助:)我有137個屬性設置的愚蠢函數需要3分鐘才能運行,現在需要10秒鐘:超棒:D –

+0

對不起,我忘了這麼做。現在完成:) –

1

只是爲了更新這個答案是什麼,谷歌已經過時ScriptProperties並與PropertiesService取代它。你能解決Properties對象使用setProperties方法()同樣的問題,但你必須選擇要使用到PropertiesService調用該類型的商店第一:

var myObject = {} ; 
 
    for (var i = 0; i < data.length; ++i) { 
 
    var row = data[i]; 
 
    var propertyKey = row[0]; 
 
    var propertyValue = row[1]; 
 
    myObject[propertyKey] = propertyValue; 
 
    } 
 

 
var myProperties = PropertiesService.getScriptProperties(); // or getUserProperties() or getDocumentProperties() 
 
myProperties.setProperties(myObject);

documentation爲細節。注意:這似乎只適用於簡單的鍵/值對。當我嘗試設置並獲取更復雜的JSON對象時,將鍵設置爲值數組,我可以檢索對象而不是其中的值。我無法成功使用JSON.parse()。我會再次發佈,如果我能弄明白。