在我的脚本中,我尝试使用setValues()函数在单次迭代中更新大量单元格,但是我得到了"无法将数组转换为Object [] []"错误。当我减小数组的大小时,单元格更新没有问题。我无法找到有关setValues()函数限制的任何信息,因此数组的大小确实是个问题吗?
我真的不想将我的阵列分开,所以使用完整阵列无论如何都会出现这个错误吗?
function counter(parts, milestones, WIPSheet, MSSheet, magnets) {
var MSSS = SpreadsheetApp.openById('');
var WIP = SpreadsheetApp.openById('');
var MSSOI = MSSS.getSheetByName(MSSheet);
var WIPSOI = WIP.getSheetByName(WIPSheet);
var location = 0;
var ms = '';
var WIPparts = [];
for(var i = 0; i < magnets.length; i++){
if(magnets[i][3] == 0){
ms = magnets[i][1]
for(var j = 1; j < milestones.length +1; j++){
if(ms == milestones[j-1][0] ){
for(var l = 0; l < j; l++){
for(var k = 0; k< parts.length; k++){
parts[k][2] += milestones[l][k+1]; } }}
}
for( j = 0; j < parts.length; j++){
WIPparts[parts[j][1]-3] = [];
WIPparts[parts[j][1]-3][0] = parts[j][2];
}
WIPSOI.getRange(3,magnets[i][2],WIPparts.length,1).setValues(WIPparts);
for( var k = 0; k<parts.length; k++){
parts[k][2] = 0;
}
}
}
}
&#13;
数组本身是二维的,实际上目前包含175个数字,例如[[1],[2],[3],...,[175]]
答案 0 :(得分:0)
您的阵列可能有问题,我一次更新数千个单元而没有打嗝,也许某处有一个空数组,更新
WIPSOI.getRange(3,magnets[i][2],WIPparts.length,1).setValues(WIPparts);
与
for( lin in WIPparts )
for( col in WIPparts[ lin ] )
if( !WIPparts[ lin ][ col ] )
WIPparts[ lin ][ col ] = "";
WIPSOI.getRange(3,magnets[i][2],WIPparts.length,WIPparts[0].length).setValues(WIPparts);
第一部分将消除未初始化的数组,第二部分将消除使该范围的最后部分错误的可能性。