我有一个电子表格,可以根据 Google 表单中的信息生成测试计划。我想做的是编写一个脚本来检查 B 列,如果 B[行号] 中有内容,则将单元格 I3 复制到 I[行号] 中。
这是我正在处理的内容:
var testplan = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TestPlan");
for (var j = 0; j < 200; j++) {
var destination = testplan.getRange(3, 9);
var contentCheck = testplan.getRange("B2:B200").getValues();
if (contentCheck != '' && contentCheck != 0) {
destination.copyTo(testplan.getRange(j, 9));
};
现在,如果我从非 j 的任何内容(例如 4)设置 copyTo,它就会很好地复制到 I4。否则,我会收到错误“范围的坐标或尺寸无效。”
有没有办法在这里使用我没有看到的变量?还是我还有其他问题?
最佳答案
几个问题:
- 您计划将
I3
复制到I[row]
,但您的contentCheck
从B2
开始>,重叠。重叠是导致错误的原因,“范围的坐标或尺寸无效。”
- 您已将源单元格
I3
称为“目标”,这令人困惑。我们将其称为源
。另外,您知道单元格坐标,那么为什么不使用它们呢? - 您已在循环内声明了该值...但它永远不会更改,因此只需在循环之前执行一次即可。
类似地,
contentCheck
可以在循环之前加载一次。它产生一个二维数组(在本例中是一个行数组,每行都有一个列)。您需要使用行索引和列索引将其作为数组进行寻址,否则首先会展平整个数组以创建一个字符串值以与''
进行比较,然后解析一个整数以与“0”进行比较' 这里:if (contentCheck != '' && contentCheck != 0) {
这是一件好事,一旦我们索引到单个值,ala
contentCheck[j][0]
...该比较可以简化为 truthiness 的测试:if (contentCheck[j][0]) {
数组将从 0 开始,而电子表格的行索引和列索引从 1 开始。您需要对此进行调整,特别是因为您的范围从
B2
开始,跳过一行。 (为了避免前面提到的重叠,假设它应该从B4
开始 - 您需要整理实际值。)
你最终应该得到这样的结果:
var testplan = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName("TestPlan");
var source = testplan.getRange("I3");
var contentCheck = testplan.getRange("B4:B200").getValues();
for (var j = 0; j < contentCheck.length; j++) {
if (contentCheck[j][0])) {
// 0-based j plus 1 to be 1-based, plus starting row
source.copyTo(testplan.getRange(j+1+4, 9));
};
}
关于javascript - 是否可以在 Google Apps 表格脚本的 copyTo 命令中使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30202015/