2

我成功地用范围 A1 中的值填充了单个列 (A) ...

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var lastRow = ss.getDataRange().getNumRows();  
  var rngVal = ss.getRange("A1").getValue()
  ss.getRange("A2:A"+lastRow).setValue(rngVal)

所以后来我以为我在easy-street上,我试图通过用C1:H1范围内的值填充多列范围来修改/应用到更大的范围......

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var lastRow = ss.getDataRange().getNumRows();  
  var rngVal = ss.getRange("C1:H1").getValues()
  ss.getRange("C2:H"+lastRow).setValues(rngVal)

显然,这不仅仅是在“Value”这个词的末尾加上一个“S”。

错误如下:

范围高度不正确,为 1 但应为 10

(仅供参考:var lastRow = 11)

顺便说一句,如果我使用 Value 而不是 Value s,我不会收到任何错误,尽管我最终得到的单元格中充满了仅在范围 C1 中找到的值。

所以我很接近......或者很远。其中的一个。

帮助???

4

2 回答 2

3

错误消息非常明确...数组的大小必须适合 getValues 和 setValues 的范围。试试这样:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var lastRow = ss.getLastRow()  
  var rngVal = ss.getRange("C1:H"+lastRow).getValues();// get an array of 10 "rows" and 6 "columns"
  ss.getRange("C2:H"+(lastRow+1)).setValues(rngVal);//write back this array to a range that has the same size. (starting from Row2 it must ends on lastRow+1 to keep the same number of "rows"
}

此函数会将范围 C1:H last Row 转换为 C2:H lastRow+1,不确定它是否非常有用,但这不是重点 ;-)


编辑:对不起,我没有完全理解你的要求......这是一个从 C1:H1 复制数据的代码在下面的所有行中

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var lastRow = ss.getLastRow()  
  var rngVal = ss.getRange("C1:H1").getValues();// get an array of the first row
  var rowData = rngVal[0]
  var newData = []
  for(n=1;n<lastRow;++n){newData.push(rowData)}
  ss.getRange("C2:H"+lastRow).setValues(newData);//write back this array to a range that has the same size. (starting from Row2 it must ends on lastRow+1 to keep the same number of "rows"
}

EDIT2 在您的评论之后:

一句话解释:

使用时,range.getValues()我们得到一个二维数组,这意味着可以表示如下的数组数组:[[data1,data2,data3],[data4,data5,data6]]data1、2 和 3 是第一个数组的值(索引 0),数据 4,5 和 6 是第二个数组的值数组(索引 1)。因此,如果您想获取第一个数组中的值,则必须这样编写:value = arrayName[0]这将返回一个一维数组[data1,data2,data3],这就是我用来获取 rowData 的方法。

现在我们需要再次获取一个二维数组,以便能够将新数据写回电子表格中的某个范围。因此,我们创建了一个新数组(var newData=[]var newData = new Array()完全相同),在 for 循环中,我们将 rowData 数组添加到这个新数组中......结果将是一个数组数组,这实际上是我们正在寻找的,我们可以在一个setValues语句中直接将其写入工作表。

于 2013-04-17T22:52:19.477 回答
0

好吧,这似乎做到了......

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var lastRow = ss.getLastRow()  
  var rngVal = ss.getRange("C1:H1").getValues()
  for (var x=1; x<=lastRow; x++) {
  ss.getRange("C"+x+":H"+x).setValues(rngVal);
于 2013-04-17T23:33:13.827 回答