0

另一个 GAS 问题。我阅读了有关ScriptProperties和批量设置属性的文档,以及(再次)有关最佳实践的文档。但是,我对 Javascript 并不熟悉,而且对 GAS 还是很陌生,因此我一直在超出 API 调用的速率限制。

基本上,我想从电子表格中“获取”所有这些属性,将它们放入数组或对象或其他东西中,然后批量设置所有这些属性。我有正确的键和值,我只是不知道如何将它们临时存储在 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对象一次批量设置它们?伪想法在代码块中被注释掉。

4

2 回答 2

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);
}
于 2013-05-31T16:50:32.380 回答
1

只是为了更新这个答案,Google 已弃用 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);

有关详细信息,请参阅文档。注意:这似乎只适用于简单的键/值对。当我尝试设置和获取更复杂的 JSON 对象时,将键设置为值数组,我可以检索对象但不能检索其中的值。我也无法成功使用 JSON.parse() 。如果我能弄清楚,我会再次发布。

于 2014-09-29T16:37:07.477 回答