在多行中填写范围(多列) - google-apps-script

时间:2013-04-17 22:24:25

标签: javascript google-apps-script google-sheets

我成功地使用在范围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)

所以那时我以为我在轻松的街道上,并且我尝试通过填充多列范围来修改/应用它到更大的范围,其中包含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)

显然,除了简单地拍打" S"在这个词的末尾"价值"。

错误内容如下:

  

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

(仅供参考:var lastRow = 11)

顺便说一句,如果我使用Value而不是Value s ,我没有错误,虽然我最终只有在C1范围内找到的值的单元格。

所以我关闭......或者离开了。其中之一。

帮助???

2 个答案:

答案 0 :(得分: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最后一行移至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()时,我们得到一个2维数组,意思是一个数组数组,可以表示如下:[[data1,data2,data3],[data4,data5,data6]] data1,2&amp; 3是第一个数组(索引0)和数据4,5&amp;的值。 6是第二阵列(索引1)的值。因此,如果你想获得第一个数组中的值,你必须这样写:value = arrayName[0]这将返回一维数组[data1,data2,data3],这就是我以前得到的rowData。

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

答案 1 :(得分: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);