我正在尝试将工作表从一个电子表格复制/传输到另一电子表格。我尝试了各种方法,.copyTo似乎是最好,最有效的方法。
.copyTo运作良好,但我正努力发送至特定的工作表...
这是我的代码:
function TransferDataOut() {
var source = SpreadsheetApp.getActiveSpreadsheet();
var sheetA = source.getSheets()[0]; //sheet source number
var destination = SpreadsheetApp.openById('the destination sheet');
var each = "Data_Incoming";
var ss = SpreadsheetApp.getActiveSpreadsheet();
sheetA.copyTo(destination); // I tried renaming .setName(each);
}
因此,如果我仅使用sheetA.copyTo(destination);它只是创建一个复印表,例如the_souce_sheet_name的副本。 如果我尝试重命名以使其具有特定的名称,则第二次运行该工作表已存在于目标电子表格中后,我将收到错误消息。
我真正需要实现的是源电子表格中的功能将数据从源工作表复制到目标电子表格中始终相同的工作表中。 也许.copyTo不是正确的方法? 任何建议和代码都将对您有所帮助!
在目标电子表格中的确切工作表上接收数据的原因是因为我有一个触发器On更改,该触发器执行另一个脚本以处理新的传入数据。
答案 0 :(得分:1)
var each = "Data_Incoming"
。如果我的理解正确,那么这个答案如何?我想提出2个样本。因此,请根据您的情况选择其中之一。
此示例脚本的流程如下。
each
页已删除。each
。function TransferDataOut() {
var source = SpreadsheetApp.getActiveSpreadsheet();
var sheetA = source.getSheets()[0]; //sheet source number
var destination = SpreadsheetApp.openById('the destination sheet');
var each = "Data_Incoming";
var destSheet = destination.getSheetByName(each);
if (destSheet) {
destination.deleteSheet(destSheet);
}
sheetA.copyTo(destination).setName(each);
}
此示例脚本的流程如下。
如果电子表格B中不存在工作表名称为each
的工作表,则复制的工作表将重命名为each
。
如果电子表格B中存在工作表名称为each
的工作表,则源工作表将以Copy of ###
的形式复制到电子表格B。
each
工作表已清除。each
工作表中。function TransferDataOut() {
var source = SpreadsheetApp.getActiveSpreadsheet();
var sheetA = source.getSheets()[0]; //sheet source number
var destination = SpreadsheetApp.openById('the destination sheet');
var each = "Data_Incoming";
var copiedSheet = sheetA.copyTo(destination);
var destSheet = destination.getSheetByName(each);
if (destSheet) {
destSheet.clear();
var srcRange = copiedSheet.getDataRange();
srcRange.copyTo(destSheet.getRange(srcRange.getA1Notation()));
destination.deleteSheet(copiedSheet);
} else {
copiedSheet.setName(each);
}
}
each
表被删除。所以请注意这一点。
如果我误解了您的问题,而这不是您想要的结果,我深表歉意。
以下示例脚本用于实现上述情况。
首先,准备目标电子表格的脚本。
脚本:function doGet() {
sample(); // This is the function that you want to run when the source values are copied.
return ContentService.createTextOutput();
}
将以上脚本复制并粘贴到目标电子表格的脚本编辑器后,请执行以下流程。
https://script.google.com/macros/s/#####/exec
。下一步,源电子表格的脚本准备如下。在该样品中,使用样品2。我认为您也可以使用示例1。
脚本:function TransferDataOut() {
var source = SpreadsheetApp.getActiveSpreadsheet();
var sheetA = source.getSheets()[0]; //sheet source number
var destination = SpreadsheetApp.openById('the destination sheet');
var each = "Data_Incoming";
var copiedSheet = sheetA.copyTo(destination);
var destSheet = destination.getSheetByName(each);
if (destSheet) {
destSheet.clear();
var srcRange = copiedSheet.getDataRange();
srcRange.copyTo(destSheet.getRange(srcRange.getA1Notation()));
destination.deleteSheet(copiedSheet);
} else {
copiedSheet.setName(each);
}
// Added
var url = "https://script.google.com/macros/s/###/exec"; // Please set the retrieved URL of Web Apps.
UrlFetchApp.fetch(url);
}
TransferDataOut()
时,目标电子表格的doGet()
由UrlFetchApp.fetch(url)
运行。