范围宽度不正确(为1,但应为2)

时间:2018-12-23 16:53:46

标签: google-apps-script google-sheets

我不断收到“错误的范围宽度为1,但应为2”错误,我不确定为什么。这段完全相同的代码可以在同一项目的同一工作表上的同一脚本的同一表中正常工作。

记录器按预期为widthApplied2输出'2.0'。

即使我手动将“宽度”(numColumns)列为“ 2”,它也不起作用。使用变量numColumnswidthApplied2不起作用。有任何想法吗?

var arrayApplied = listApplied.split(',');
var arrayApplied2 = [];
while (arrayApplied.length)
    arrayApplied2.push(arrayApplied.splice(0,2));
var lengthApplied2 = arrayApplied2.length;
var widthApplied2 = arrayApplied2[0].length;
//Logger.log(arrayApplied2);
//Logger.log(lengthApplied2);
Logger.log(widthApplied2);

//PASTE APPLIED TEAMS TO SHEET
var startRow = 15;
var startColumn = 7;
var numRows = lengthApplied2;
var numColumns = widthApplied2;

var ss = SpreadsheetApp.openById('1tyW1n-wBZVygFSovF3Z3NrlqDjsANzOyL7aIayTCdFQ');
var sheet = ss.getSheetByName('test');
var range = sheet.getRange(startRow, startColumn, lengthApplied2, widthApplied2);//dynamically changes range size based on array size

range.setValues(arrayApplied2);

1 个答案:

答案 0 :(得分:1)

setValues需要一个矩形2D数组,该数组的元素本身就是要设置的值的数组,并且长度相同。这里的代码没有显示listApplied是什么,但是使用split意味着它是一个用逗号分隔的值字符串。

因此,arrayAppliedString[](元素为Array的{​​{1}})。 带有2个参数的Array#splice方法将返回带有已修改内容的新String。这将是另一个长度为2的Array。例如:

String[]

如果我们通过拼接成一些目标数组来耗尽var a = 'Hello,There,Friend'; var aArr = a.split(','); // ['Hello', 'There', 'Friend'] var b = aArr.splice(0, 2); // b = ['Hello', 'There'] & aArr = ['Friend'] ,我们最终会得到

aArr

这确实是一个2D数组,但它不是矩形的-其中一个元素的长度为1,其余元素的长度为2。

在这种情况下,坏元素只能是最后一个。通常,也许还有其他操作可以确定行的元素(而不是var c = [ ['Hello', 'There'], ['Friend'] ]; ),因此可以使用以下类似的方法确定坏元素(并在适当时填充它):

.splice(0, 2)