如何使用 google 应用程序脚本将一系列数据复制到另一个 google sheet?
How to copy a range of data to another google sheet using google apps script?
来源:
目的地:
大家好,
我有 2 google sheet、Source
和 Destination
。我想使用 google 应用程序脚本将一系列数据从源 sheet 复制到目标 sheet。所以数据应该出现在 Destination sheet 的最后一行。这是我的代码:
function copyInfo() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var copySheet = ss.getSheetByName("Source");
var pasteSheet = ss.getSheetByName("Destination");
// get source range
var source = copySheet.getRange(3,1,1,10);
// get destination range
var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,1,1,10);
// copy values to destination range
source.copyTo(destination);
}
似乎脚本只允许我在一个 google sheet(不同的选项卡)内进行复制,而不是 2 个不同的 google sheet。我可以知道我应该如何修改它以便脚本能够找到我的目的地 google sheet 并将数据粘贴到最后一行吗?任何帮助将不胜感激!
编辑
我尝试使用 onEdit
来触发脚本,但它似乎不起作用。下面是我的脚本:
function onEdit(e) {
if (e.range.columnStart == 11 && e.range.rowStart == 3){
var ss = SpreadsheetApp.getActiveSpreadsheet();
const id ='1r5Hygl5ysahMi6DQ3duDR5L8c4aGX_0CJba7lXxnejw';
var copySheet = ss.getSheetByName("Sheet1");
var pasteSheet = SpreadsheetApp.openById(id).getSheetByName("Sheet1");
if (e.value == 'Submit'){
var source = copySheet.getRange(3,1,1,10);
const values = source.getValues();
var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,1,1,10);
destination.setValues(values);
}
}
}
来源:
https://docs.google.com/spreadsheets/d/1jnOvE-Dc7y9o7GsgN9fjOXZWlUCwiJayugX5q4Y3CA0/edit#gid=0
目的地:
https://docs.google.com/spreadsheets/d/1r5Hygl5ysahMi6DQ3duDR5L8c4aGX_0CJba7lXxnejw/edit#gid=0
使用Range.getValues() and Range.setValues()
const id ='ID of paste Spreadsheet';
var pasteSheet = SpreadsheetApp.openById(id).getSheetByName("Destination");
var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,1,1,10);
const values = source.getValues();
destination.setValues(values);
方法getSheetByName
用于在价差sheet 中定义sheet。要定义特定的传播sheet,您应该使用openById
并关联传播ID(https://docs.google.com/spreadsheets/d/{spreadsheet ID}/edit)。
将您的来源 sheet 定义为:
var copysheet = SpreadsheetApp.openById('enter id for Source').getSheetByName('Sheet 1')
将您的目的地sheet定义为:
var pastesheet = SpreadsheetApp.openById('enter id for Destination').getSheetByName('Sheet 1')
如果我没理解错的话,你的目标是:
/* Every time a user sets the value of cell K3 in source spreadsheet
to "submit". Copy all the values of row 3 and paste them into the
destination sheet under the last row. Then delete the source values
and set the value of K3 to "Clear" again. */
您需要安装触发器和触发时复制值的函数。那么让我们一步一步来吧。
示例:
- 首先让我们创建一个绑定到源 SS 的脚本。让我们编辑您的
copyInfo()
函数,使其将目标电子表格 ID 作为参数。
function copyTo(destinationSSId) {
// Open source SS at tab named "Source"
let copySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Source");
// Open destination SS at tab named "Destination"
let pasteSheet = SpreadsheetApp.openById(destinationSSId).getSheetByName("Destination");
// Get source values
let sourceValues = copySheet.getRange(3, 1, 1, 10).getValues();
// Set values to destination range
pasteSheet.getRange(pasteSheet.getLastRow() + 1, 1, 1, 10).setValues(sourceValues);
// Log the pasted values from the last row
console.log("Last row pasted: " + pasteSheet.getRange(pasteSheet.getLastRow(), 1, 1, 10).getValues()[0]);
}
- 创建一个函数来清除源值并重置“表单”。
function clearSubmission() {
let copySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Source");
copySheet.getRange(3, 1, 1, 10).clearContent()
copySheet.getRange(3, 11, 1, 1).setValue("Clear");
console.log("Source submitted and cleared.")
}
- 设置要触发的函数。
function myTriggeredFunction(e) {
console.log(JSON.stringify(e.range), e.value)
if (e.range.columnStart == 11 && e.range.rowStart == 3) {
if (e.value == 'Submit') {
let destinationSSId = '{YOUR DESTINATION SS ID}';
copyTo(destinationSSId);
clearSubmission();
}
}
}
- 通过转到项目中的“触发器”选项卡,将触发器作为“从电子表格 - 编辑时”安装到 运行 函数
myTriggeredFunction
。
来源:
目的地:
大家好,
我有 2 google sheet、Source
和 Destination
。我想使用 google 应用程序脚本将一系列数据从源 sheet 复制到目标 sheet。所以数据应该出现在 Destination sheet 的最后一行。这是我的代码:
function copyInfo() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var copySheet = ss.getSheetByName("Source");
var pasteSheet = ss.getSheetByName("Destination");
// get source range
var source = copySheet.getRange(3,1,1,10);
// get destination range
var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,1,1,10);
// copy values to destination range
source.copyTo(destination);
}
似乎脚本只允许我在一个 google sheet(不同的选项卡)内进行复制,而不是 2 个不同的 google sheet。我可以知道我应该如何修改它以便脚本能够找到我的目的地 google sheet 并将数据粘贴到最后一行吗?任何帮助将不胜感激!
编辑
我尝试使用 onEdit
来触发脚本,但它似乎不起作用。下面是我的脚本:
function onEdit(e) {
if (e.range.columnStart == 11 && e.range.rowStart == 3){
var ss = SpreadsheetApp.getActiveSpreadsheet();
const id ='1r5Hygl5ysahMi6DQ3duDR5L8c4aGX_0CJba7lXxnejw';
var copySheet = ss.getSheetByName("Sheet1");
var pasteSheet = SpreadsheetApp.openById(id).getSheetByName("Sheet1");
if (e.value == 'Submit'){
var source = copySheet.getRange(3,1,1,10);
const values = source.getValues();
var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,1,1,10);
destination.setValues(values);
}
}
}
来源: https://docs.google.com/spreadsheets/d/1jnOvE-Dc7y9o7GsgN9fjOXZWlUCwiJayugX5q4Y3CA0/edit#gid=0
目的地: https://docs.google.com/spreadsheets/d/1r5Hygl5ysahMi6DQ3duDR5L8c4aGX_0CJba7lXxnejw/edit#gid=0
使用Range.getValues() and Range.setValues()
const id ='ID of paste Spreadsheet';
var pasteSheet = SpreadsheetApp.openById(id).getSheetByName("Destination");
var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,1,1,10);
const values = source.getValues();
destination.setValues(values);
方法getSheetByName
用于在价差sheet 中定义sheet。要定义特定的传播sheet,您应该使用openById
并关联传播ID(https://docs.google.com/spreadsheets/d/{spreadsheet ID}/edit)。
将您的来源 sheet 定义为:
var copysheet = SpreadsheetApp.openById('enter id for Source').getSheetByName('Sheet 1')
将您的目的地sheet定义为:
var pastesheet = SpreadsheetApp.openById('enter id for Destination').getSheetByName('Sheet 1')
如果我没理解错的话,你的目标是:
/* Every time a user sets the value of cell K3 in source spreadsheet
to "submit". Copy all the values of row 3 and paste them into the
destination sheet under the last row. Then delete the source values
and set the value of K3 to "Clear" again. */
您需要安装触发器和触发时复制值的函数。那么让我们一步一步来吧。
示例:
- 首先让我们创建一个绑定到源 SS 的脚本。让我们编辑您的
copyInfo()
函数,使其将目标电子表格 ID 作为参数。
function copyTo(destinationSSId) {
// Open source SS at tab named "Source"
let copySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Source");
// Open destination SS at tab named "Destination"
let pasteSheet = SpreadsheetApp.openById(destinationSSId).getSheetByName("Destination");
// Get source values
let sourceValues = copySheet.getRange(3, 1, 1, 10).getValues();
// Set values to destination range
pasteSheet.getRange(pasteSheet.getLastRow() + 1, 1, 1, 10).setValues(sourceValues);
// Log the pasted values from the last row
console.log("Last row pasted: " + pasteSheet.getRange(pasteSheet.getLastRow(), 1, 1, 10).getValues()[0]);
}
- 创建一个函数来清除源值并重置“表单”。
function clearSubmission() {
let copySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Source");
copySheet.getRange(3, 1, 1, 10).clearContent()
copySheet.getRange(3, 11, 1, 1).setValue("Clear");
console.log("Source submitted and cleared.")
}
- 设置要触发的函数。
function myTriggeredFunction(e) {
console.log(JSON.stringify(e.range), e.value)
if (e.range.columnStart == 11 && e.range.rowStart == 3) {
if (e.value == 'Submit') {
let destinationSSId = '{YOUR DESTINATION SS ID}';
copyTo(destinationSSId);
clearSubmission();
}
}
}
- 通过转到项目中的“触发器”选项卡,将触发器作为“从电子表格 - 编辑时”安装到 运行 函数
myTriggeredFunction
。