Javascript 是否可以在Google Apps表单脚本中的copyTo命令中使用变量?
我有一个电子表格,可以根据谷歌表单上的信息生成测试计划。我要做的是制作一个脚本来检查B列,如果B[行编号]中有内容,则将单元格I3复制到I[行编号]中 以下是我的工作内容:Javascript 是否可以在Google Apps表单脚本中的copyTo命令中使用变量?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一个电子表格,可以根据谷歌表单上的信息生成测试计划。我要做的是制作一个脚本来检查B列,如果B[行编号]中有内容,则将单元格I3复制到I[行编号]中 以下是我的工作内容: var testplan = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TestPlan"); for (var j = 0; j < 200; j++) { var destination = testplan.getRange(3, 9);
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));
};
现在,如果我将copy设置为非j的任何值,比如4,它会很好地复制到I4。否则,我得到的错误是坐标或范围的尺寸无效
有没有办法在这里使用我没有看到的变量?还是我出了什么问题?几个问题:
您计划将I3复制到I[row],但您有从B2开始的contentCheck,它重叠。重叠是导致错误的原因,范围的坐标或尺寸无效。
您已经调用了源单元格I3和目标单元格,这很混乱。让我们称之为源头。而且,你知道单元坐标,为什么不使用它们呢?
您已经在循环中声明了该值。。。但它永远不会改变,所以在循环之前只做一次。
类似地,contentCheck可以在循环之前加载一次。在本例中,它生成一个二维数组,即行数组,每个行都有一列。您需要使用行和列索引将其作为一个数组进行寻址,否则首先将整个数组展平以创建一个要比较的字符串值,然后在此处解析一个整数以与“0”进行比较:
if (contentCheck != '' && contentCheck != 0) {
这里很好,一旦我们索引到一个值,ala 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));
};
}
啊,好的,非常感谢你的解释!结果很好。
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));
};
}