google-apps-script - 范围宽度不正确(为 1 但应为 2)
问题描述
我不断收到“不正确的范围宽度是 1 但应该是 2”错误,我不知道为什么。这段完全相同的代码在同一个项目的同一个工作表上的另一个脚本上工作,没有问题。
widthApplied2
记录器按预期输出“2.0” 。
即使我手动将“宽度”(numColumns
)列为“2”,它也不起作用。使用变量numColumns
并且widthApplied2
不起作用。有任何想法吗?
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);
解决方案
setValues
需要一个矩形二维数组——一个数组,其元素本身就是要设置的值的数组,并且具有相同的长度。您在此处的代码没有显示是什么listApplied
,但使用split
暗示它是一个以逗号分隔的值字符串。
因此,arrayApplied
是 a String[]
(Array
其元素是String
s)。带有 2 个参数的Array#splice
方法返回一个Array
带有修改内容的新方法。这将是另一个String[]
长度为 2 的。例如:
var a = 'Hello,There,Friend';
var aArr = a.split(','); // ['Hello', 'There', 'Friend']
var b = aArr.splice(0, 2); // b = ['Hello', 'There'] & aArr = ['Friend']
如果我们aArr
通过拼接到某个目标数组来耗尽,我们最终会得到
var c = [
['Hello', 'There'],
['Friend']
];
这确实是一个二维数组,但它不是矩形 - 其中一个元素的长度为 1,而其余元素的长度为 2。
对于这种情况,坏元素只能是最后一个。一般来说,也许还有其他一些操作可以确定行的元素(而不是.splice(0, 2)
),因此可以使用以下内容确定坏元素(并在适当时填充它):
function fixer_(input) {
const maxLen = input.reduce(function (curMax, row) { return Math.max(curMax, row.length); }, 0);
input.forEach(function (row, index) {
if (row.length < maxLen) {
console.log('Row index ' + index + ' was too short. Padding it with ""');
row.push('');
}
});
}
推荐阅读
- javascript - 单击停止按钮时,我想显示五彩纸屑。单击停止按钮时如何在整个页面上显示五彩纸屑
- reactjs - 从 redux-saga 更改路由时突出显示“antd”菜单项
- android - 从 logcat Android-TV 中提取命令
- datastage - IBM Datastage 假设列是 WVARCHAR 而它是日期
- javascript - Bootstrap 3:如何通过单击当前导航栏内容中的超链接来链接到另一个导航栏?
- python - 斐波那契数列递归法
- ckeditor - 如何理解CKEditor4的“justify”选项?
- python - 使用顶层分类层对 Inception V3 层进行预训练
- c++ - 我们如何使用 AWS SDK C++ 在 cloudwatch 中查询已经创建的“LogGroup”和“StreamName”?
- openflow - Ryu 控制器 - simple_switch_13_stp 在失败后不重新计算树?