尝试使用执行此代码时出现以下错误。异常:数据中的列数与范围中的列数不匹配。数据为 0,但范围为 1。(第 15 行,文件“代码”)
function getName(){
const srcSheetName = "result";
const dstSheetName = "Allergy";
const ss = SpreadsheetApp.getActiveSpreadsheet();
const srcSheet = ss.getSheetByName(srcSheetName);
const allergyRange = srcSheet.getRange('F1:BQ' + srcSheet.getLastRow()).getValues();
const dstSheet = ss.getSheetByName(dstSheetName);
const lr = dstSheet.getRange("A2:A").getLastRow();
var names = allergyRange.map(row => row.slice(row.length-12)).forEach((row, i) => {
if(!row.every(val => val == 0)) return allergyRange[i][0]
});
const dstRange = dstSheet.getRange(2, 1, dstSheet.getLastRow(), 1);
const dstValues = dstRange.getValues();
const putValues = [names];
dstRange.setValues(putValues);
}
我认为这是因为名称变量“名称”的列太多或所需范围没有值。我曾尝试将“名称”直接放入 setValues 函数中,但这不起作用,并且我收到另一条错误消息“Bad Value”。
更新:发生这种情况是因为 [names] 为空。
dstRange.setValues(names);
我认为潜在的问题是我使用 .map() 方法而不是 Object.assign() 来操作原始二维数组,但是当我在这里查看文献时它指出 .map() 创建了一个新数组和 JavaScript 视图数组作为对象。
为了诊断问题,我在循环内外都使用 Logger.log 来了解数据集发生了什么。
内循环:
var names = allergyRange.map(row => row.slice(row.length-12)).forEach((row, i) => {
if(!row.every(val => val == 0)) Logger.log(allergyRange[i][0])
});
外循环:
var names = allergyRange.map(row => row.slice(row.length-12)).forEach((row, i) => {
if(!row.every(val => val == 0)) return allergyRange[i][0]
});
Logger.log(names)
在循环内使用时,我得到所需的名称列表,但在循环外使用时,我在检查日志时得到“null”。
我必须缺少一个关键步骤。如何从“名称”中获取输出并使用 setValues() 或其他方法将每个输出放在 Google 表格中工作表的第一列中?有没有办法用循环的输出创建一个新的二维数组,或者我应该完全使用另一种方法来操纵数据集?我是 JavaScript 的新手,欢迎任何提示。
慕虎7371278
相关分类