Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以在Google Apps表单脚本中的copyTo命令中使用变量?_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 是否可以在Google Apps表单脚本中的copyTo命令中使用变量?

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);

我有一个电子表格,可以根据谷歌表单上的信息生成测试计划。我要做的是制作一个脚本来检查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));
};
现在,如果我将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));
  };
}