我有一个带有复选框的模板工作表,我想将选中的模板复制到新工作表中。我有一个涉及添加行的工作版本,但我正在寻找更快的东西。我以为在新旧纸上获取一定范围的值并在数组上工作将是最好的,但我遇到了错误:
'无法将数组隐式转换为对象[] []“。
我认为问题与以下事实有关:这是一张新的未填充的工作表。下面的代码是正在发生的最简单的示例。我是在做错什么,还是这不可能?
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);
}
答案 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!');
}
}