javascript - 循环后复制行
问题描述
在我最后一个问题之后,我遇到了复制行的问题。
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('ws1');
var startRow = 4;
var lastRow = sheet.getLastRow();
var numRows = lastRow - startRow + 1;
var lastCol = sheet.getLastColumn();
var dataSetValues = sheet.getRange(startRow, 1, numRows, lastCol).getValues();
for (var i = 0; i < numRows; i++){
let fVal = dataSetValues[i][5];
let gVal = dataSetValues[i][6];
let sum = +fVal + +gVal;
if (sum > 115) {
let row = dataSetValues[i];
}
}
我期待什么?
我希望设置要复制的列
我编辑了这样的代码
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('ws1');
var startRow = 4;
var lastRow = sheet.getLastRow();
var numRows = lastRow - startRow + 1;
var lastCol = sheet.getLastColumn();
var dataSetValues = sheet.getRange(startRow, 1, numRows, lastCol).getValues();
for (var i = 0; i < numRows; i++){
let aVal = dataSetValues[i][0]; let bVal = dataSetValues[i][1]; // + other columns
let fVal = dataSetValues[i][5];
let gVal = dataSetValues[i][6];
let sum = +fVal + +gVal;
if (sum > 115) {
let row = dataSetValues[i];
var ssDest = spreadsheet.getSheetByName('ws2'); var rngDest = ssDest.getRange(ssDest.getLastRow()+1,1); //start copy rngDest.setValues(row)
}
}
我收到这个错误
参数 (number[]) 与 SpreadsheetApp.Range.setValues 的方法签名不匹配
谢谢
解决方案
您的脚本只需要对其进行一些更改:
1. 需要注意的是,该setValues()
方法接受形式为 的二维数组作为参数Object[][]
。
您只是将一个一维数组传递给它,因此The parameters (number[]) don't match the method signature for SpreadsheetApp.Range.setValues
您收到的错误。
为了解决这个问题,您必须转换row
为二维数组并进行以下更改
从
rngDest.setValues(row)
到
rngDest.setValues([row])
2. 您必须准确指定目标范围内预期的行数和列数。
进行上述更改后,您最终会遇到The number of columns in the data does not match the number of columns in the range
再次预期的错误。这是因为该getRange
方法还需要行数和列数,以便在使用setValues
时准确知道要设置的数据结构。
如果你看一下getRange
方法:
getRange(row, column, numRows, numColumns)
返回具有给定行数和列数的给定坐标处左上角单元格的范围。
为了解决这个问题,必须进行简单的更改以准确指示行数和列数:
从
var rngDest = ssDest.getRange(ssDest.getLastRow()+1,1)
到
var rngDest = ssDest.getRange(ssDest.getLastRow() + 1, 1, 1, row.length);
如您所见,此处的行数为 1(因为您一次复制一行数据)并且列数等于row.length
(因为row
变量一次具有与一行对应的所有值)。
参考
推荐阅读
- javascript - Vuej.s 中 @import sass 文件的问题
- android - EditTextPreference inputType=textPassword 不起作用
- go - crypto/tls 包中的自定义 VerifyPeerCertificate
- python - 使用 sqlalchemy 在 MySQL 中插入行
- node.js - 具有实时数据库触发器的 Firebase 云功能:如何更新源节点?
- python - 如何从测试类以本地模式调试 PySpark
- javascript - 如何在后台脚本创建的 iframe 中获取元素?
- django-rest-framework - DRF 序列化器自定义创建
- kubernetes - 使用 treafik 公开服务时网关错误
- python - 错误:根:检查模块中的内部 Python 错误