javascript - Google 脚本将一个单元格写入另一个电子表格中的范围

标签 javascript google-apps-script google-sheets

这里拉了一下我的头发。

我正在尝试在 Google 表格上构建一个“类似数据库”的结构(修改一个文档中的条目,它会在其他地方更新)。

  • 2 个电子表格,需要将数据从一个移动到另一个
  • 选择“Spreadsheet1”上的单个单元格,复制到“Spreadsheet2”上的一系列单元格
  • 我克服了许多错误并修复了它们,但这个是无敌的:

找不到范围(第 10 行,文件“代码”)

我做错了什么?

function ImportDataRange() {

  var activeSs = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = activeSs.getSheetByName("PRODUCT dashboard");
  var ssOrigin = SpreadsheetApp.openById("1gF-IsnPdnjAaoUSwOOaBfWTmK1eVzxDG87XPzjjsWxA");
  var sheetOrigin = ssOrigin.getSheetByName("INITIAL_BUDGETS");

  for (var i = 7; i < 26; i++) {

    var rangeOrigin = sheetOrigin.getRange("i, 1");
    var dataOrigin = rangeOrigin.getValues();

    for (var i = 10; i < 275; i += 6) {
      sheet.getRange("i, 1").setValues(dataOrigin);
    }
  }

} 

你可能明白了,但我需要:将A7从文档1复制到文档2的15个单元格中,然后将单元格A8从文档1复制到文档2的下15个单元格中,然后取出A9......你明白了。

最佳答案

我会这样做:

function ImportDataRange() {

  var activeSs = SpreadsheetApp.getActiveSpreadsheet(),
      sheet = activeSs.getSheetByName("PRODUCT dashboard"),
      rangeSheet = sheet.getRange(10, 1, 265), // 3rd number is the number of rows to get into the range, as described in documentation
      valsSheet = rangeSheet.getValues(); //Get all values in a double array, this is to keep any previous values in the sheet, also it already gets the array just as it is needed to use in setValues()
      ssOrigin = SpreadsheetApp.openById("1gF-IsnPdnjAaoUSwOOaBfWTmK1eVzxDG87XPzjjsWxA"),
      valsOrigin = ssOrigin.getRange(7, 1, 15).getValues(), // Same as the other getRange, gets 15 lines, starting in line 7
      sheetOrigin = ssOrigin.getSheetByName("INITIAL_BUDGETS");

  for ( origins in valsOrigin  ) { // For each value in the valsOrigin array, do something -> in each loop origins will be the next index, Eg. 0, then 1, then 2...
    for (var i = 10; i < 275; i += 6) {
      i = (+i) + (+origins); // Add the origins so it don't begin in the same line, altough it will start to overwrite after 6 loops, you should look into this logic - also, the '+' converts it to number, as they can be strings
      valsSheet[i][0] = valsOrigin[origins][0]; // Puts the current value of origins in the target array
    }
  }
  rangeSheet.setValues( valsSheet ); // Inserts all values at once in the range
}

最小化 SpreadsheetApp 调用,这些调用在时间上是昂贵的,而且受到 GAS 的限制,也使得代码更加简洁。

关于javascript - Google 脚本将一个单元格写入另一个电子表格中的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29150632/

相关文章:

javascript - onMOuseOver onMouseOut 无法嵌入 php

javascript - 将文本输出到顶部而不是底部

javascript - 将对象键替换为给定字符串模式中的值

javascript - 在特定时间仅使用纯 javascript 移动 Div Box

ajax - 如何使用 angularjs $http 修复我的 jsonp 回调以解决 "unexpected token"错误?

javascript - Google 脚本 - Array.sort - compareFunction 的操作数是否反转?

javascript - 如何检查数组中是否有一个或多个项目以及为什么此方法不起作用?

google-sheets - 将多行转置为 Google 表格中的列

python - 如何使用 google API for python 在特定文件夹下创建工作表?

google-sheets - 谷歌表格 : How do I combine a column of URLs and a column of text into one?