通过脚本在Google表格中设置单元格值的最佳方法

时间:2018-09-03 17:54:31

标签: google-apps-script google-sheets

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

  

'无法将数组隐式转换为对象[] []“。

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

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 [] []转换为数组。因此,我认为(bizarre)需要创建一个新的array [] [],如下所示:

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); 
}

1 个答案:

答案 0 :(得分:0)

好的。这是完整的解决方案。 该函数查找具有两列的工作表“ Work”。第一个是复选框,第二个是感兴趣的字符串值。对于每个复选框(值== 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!');
  }
}