【问题标题】:Optimal way to set cell values in Google Sheet via Script通过脚本在 Google Sheet 中设置单元格值的最佳方法
【发布时间】:2018-09-04 19:25:19
【问题描述】:

我有一个带有复选框的模板表,我想将选中的复选框复制到新表中。我有一个涉及添加行的工作版本,但我正在寻找更快的东西。我认为在新旧工作表上获取一系列值并处理数组是最好的,但我遇到了一个错误:

'不能将数组转换为Object[][]"。

我认为问题与这是一张新的未填充工作表有关。下面的代码是正在发生的事情的最简单示例。是我做错了什么,还是这不可能?

function test(){
  var s = SpreadsheetApp.getActiveSpreadsheet().insertSheet();
  var r = s.getRange(1,1,5); 
  var v = r.getValues(); 

  for ( var i=0; i < 5; i++) {
    v[i] = i; 
  }
  r.setValues(v);   //ERROR: Cannot covert Array to Object[][]`enter code here`
}

看起来像行 v[i] = i;将 Object[][] 转换为数组。所以,我认为(奇怪)我需要创建一个新数组[][],如下所示:

function test(){
  var s = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
  var r = s.getRange(1,1,5,1); 
  var v = r.getValues(); 
  var ta = []; 
  for ( var i=0; i < 5; i++) {
  ta[i] = [];
    ta[i].push(i) ;
  }  
  r.setValues(ta); 
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    好的。这是完整的解决方案。 该函数查找具有 2 列的工作表“工作”;第一个是复选框,第二个是感兴趣的字符串值。对于每个选中的框(值 == true),第二列的值、字体粗细和字体大小都被复制到适当的“形状”结构中。

    一旦构建,就会创建一个新工作表,检索新工作表中的范围并用于设置单个列的值、权重和大小。

    function copyCheckedItems () {
      var cl = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Work');
      if (cl) {
        var cnt      = cl.getLastRow(); 
        var range    = cl.getRange(1,1, cnt, 2 );
        var values   = range.getValues();
        var weights  = range.getFontWeights(); 
        var sizes    = range.getFontSizes(); 
    
        // Compute data needed for new sheet in the right shape. 
        var tv = []; 
        var tw = []; 
        var ts = []; 
        var newCnt = 0;
    
        for (var row in values) {
          if(values[row][0]){
            tv[newCnt] = []; 
            ts[newCnt] = [];       
            tw[newCnt] = [];    
    
            tv[newCnt].push(values[row][1]);
            tw[newCnt].push(weights[row][1]);
            ts[newCnt].push(sizes[row][1]);
            newCnt++; 
           }    
        } 
    
        // construct the new sheet in a minimum of calls 
    
        var name     = Browser.inputBox('Enter WorkSteet name');; 
        var sheetOut = SpreadsheetApp.getActiveSpreadsheet().insertSheet(name);      
    
        var ro = sheetOut.getRange(1,1,newCnt,1); 
        ro.setValues(tv);
        ro.setFontSizes(ts); 
        ro.setFontWeights(tw); 
        //Browser.msgBox("Done.");
      }
      else {
        Browser.msgBox('Work sheet not found!');
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      相关资源
      最近更新 更多