-1

晚上好,

我正在尝试使用一些编码技能来帮助操作 Google Docs 中的电子表格,并认为我制定的逻辑是合理的 - 但脚本只是将结果返回为“范围”。

本质上,该脚本是一个嵌套循环,并且(应该)从一行数据(从 11 开始)中的六个点获取值并将它们插入一个长垂直(第 38 列)。然后它应该移动到下一行。

我认为它有效,但结果只是以“范围”的形式返回,并且看不到如何将值放入范围,如果这就是这意味着的话。

我也意识到使用单个数组来收集单个数组上的数据可能更有效,但我仍在努力掌握语法。

这是我的代码:

function Transform() {
  //load spreadsheet data and initialise variables

  var sheet = SpreadsheetApp.getActiveSheet();
  var firstrow = 11;//this is a manual figure
  var d = firstrow;
  var valuerplc = sheet.getRange(firstrow, 38);
  var value =1;

  for(var c=firstrow; c<sheet.getLastRow(); c++){
    for (var e=3; e<33; e=e+6){
      var mon = sheet.getRange(c, e);
      valuerplc = sheet.getRange(d, 38);
      valuerplc.setValue(mon);

    }
    d++;

   }
  }

任何人都可以帮忙,或者至少指出我正确的方向,好吗?

4

1 回答 1

0

您遇到了一个常见的新手问题,难以区分范围和值。

Range 表示电子表格的一个区域,其方法可让您访问对象的各种特征。您在电子表格中看到的内容或数据可通过.getValue()方法(对于一个单元格)或.getValues()(对于多个单元格)进行访问。

改变:

var mon = sheet.getRange(c, e);

至:

var mon = sheet.getRange(c, e).getValue();

...您将拥有该范围内的数据,如字符串、数字或日期,具体取决于那里的内容。

您选择的变量名称可能会导致混淆,值得小心。例如,查看valuerplc. 该名称暗示它是一个值,可能与.getValue()and混淆.setValue()。但它的使用方式是作为一个范围,如valuerplc.setValue(mon),所以它显然不是一个值。

function Transform() {
  //load spreadsheet data and initialise variables

  var sheet = SpreadsheetApp.getActiveSheet();
  var firstrow = 11;//this is a manual figure
  var d = firstrow;
  var valuerplc = sheet.getRange(firstrow, 38);
  var value =1;

  for(var c=firstrow; c<sheet.getLastRow(); c++){
    for (var e=3; e<33; e=e+6){
      var mon = sheet.getRange(c, e).getValue();
      valuerplc = sheet.getRange(d, 38);
      valuerplc.setValue(mon);
    }
    d++;
  }
}
于 2013-07-17T15:37:39.523 回答