Google 脚本将一个单元格写入另一个电子表格中的范围
Google script write one cell to range i nanother Spreadsheet
在这里有点扯我的头发。
我正在尝试在 Google 表格上构建一个 "database-like" 结构(修改一个文档中的条目,它会在其他地方更新)。
- 2 个电子表格,需要将数据从一个转移到另一个
- select "Spreadsheet1" 上的单个单元格,复制到 "Spreadsheet2"
上的一系列单元格
- 我克服了很多错误并修复了它们,但这个是无敌的:
未找到范围(第 10 行,文件 "Code")
我做错了什么?
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 从 document1 复制到 document2 的 15 个单元格中,然后将单元格 A8 从 document1 复制到 document2 的下一个 15 个单元格中,然后取 A9...。你明白了。
去掉 getRange() 参数中的引号,您没有使用字符串。只需要 .getRange(i, 0)
.
此外,如果您只是将一个单元格作为范围和一个设置值,则可以使用 .setValue()
.
以下是我的做法:
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 中受到限制,也使代码更清晰。
在这里有点扯我的头发。
我正在尝试在 Google 表格上构建一个 "database-like" 结构(修改一个文档中的条目,它会在其他地方更新)。
- 2 个电子表格,需要将数据从一个转移到另一个
- select "Spreadsheet1" 上的单个单元格,复制到 "Spreadsheet2" 上的一系列单元格
- 我克服了很多错误并修复了它们,但这个是无敌的:
未找到范围(第 10 行,文件 "Code")
我做错了什么?
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 从 document1 复制到 document2 的 15 个单元格中,然后将单元格 A8 从 document1 复制到 document2 的下一个 15 个单元格中,然后取 A9...。你明白了。
去掉 getRange() 参数中的引号,您没有使用字符串。只需要 .getRange(i, 0)
.
此外,如果您只是将一个单元格作为范围和一个设置值,则可以使用 .setValue()
.
以下是我的做法:
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 中受到限制,也使代码更清晰。