Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 从工作表到归档表的多页复制_Google Apps Script_Named Ranges - Fatal编程技术网

Google apps script 从工作表到归档表的多页复制

Google apps script 从工作表到归档表的多页复制,google-apps-script,named-ranges,Google Apps Script,Named Ranges,我在这段代码的最后一行得到了一些帮助,它非常适用于电子表格中的一张表,但是我在From电子表格中有5张表,在目标电子表格中有相同的5张表。我如何才能在其他4张表中获得相同的范围,使其在目标表格中具有相同的名称?因此,我在下面尝试将每个工作表复制到对应的同名工作表,但我已按如下方式设置了代码,但仅导入第一个工作表,是否有方法只需为整个代码输入一次原始电子表格id,而不是在每个工作表部分 function ImportDataRange() { var ss = SpreadsheetApp.

我在这段代码的最后一行得到了一些帮助,它非常适用于电子表格中的一张表,但是我在From电子表格中有5张表,在目标电子表格中有相同的5张表。我如何才能在其他4张表中获得相同的范围,使其在目标表格中具有相同的名称?因此,我在下面尝试将每个工作表复制到对应的同名工作表,但我已按如下方式设置了代码,但仅导入第一个工作表,是否有方法只需为整个代码输入一次原始电子表格id,而不是在每个工作表部分

 function ImportDataRange() {

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('AM trip'); //To Sheet Name
 var ssraw = SpreadsheetApp.openById('1Z0zU2oGktLPB-QitYMm9XtOGN4Rd-Z-UJJomGX4NIO0'); // From Spreadsheet ID
 var sheetraw = ssraw.getSheetByName('AM trip'); // From Sheet name
 var range = sheetraw.getRange('B7:U38');
 var data = range.getValues();
 var lastRow = sheet.getLastRow()+1;
 sheet.getRange(lastRow,3,data.length,data[0].length).setValues(data)

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('PM trip'); //To Sheet Name
 var ssraw = SpreadsheetApp.openById('1Z0zU2oGktLPB-QitYMm9XtOGN4Rd-Z-UJJomGX4NIO0'); // From Spreadsheet ID
 var sheetraw = ssraw.getSheetByName('PM trip'); // From Sheet name
 var range = sheetraw.getRange('B7:U38');
 var data = range.getValues();
 var lastRow = sheet.getLastRow()+1;
 sheet.getRange(lastRow,3,data.length,data[0].length).setValues(data)

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('Pool / Beach'); //To Sheet Name
 var ssraw = SpreadsheetApp.openById('1Z0zU2oGktLPB-QitYMm9XtOGN4Rd-Z-UJJomGX4NIO0'); // From Spreadsheet ID
 var sheetraw = ssraw.getSheetByName('Pool / Beach'); // From Sheet name
 var range = sheetraw.getRange('B7:U38');
 var data = range.getValues();
 var lastRow = sheet.getLastRow()+1;
 sheet.getRange(lastRow,3,data.length,data[0].length).setValues(data)

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('Night Dive'); //To Sheet Name
 var ssraw = SpreadsheetApp.openById('1Z0zU2oGktLPB-QitYMm9XtOGN4Rd-Z-UJJomGX4NIO0'); // From Spreadsheet ID
 var sheetraw = ssraw.getSheetByName('Night Dive'); // From Sheet name
 var range = sheetraw.getRange('B7:U38');
 var data = range.getValues();
 var lastRow = sheet.getLastRow()+1;
 sheet.getRange(lastRow,3,data.length,data[0].length).setValues(data)
}

谢谢你的帮助。非常感谢。

使用循环可以简化代码

您在上面说过您有5张工作表,但在代码示例中只有4张,请将其他工作表名称添加到var sheetNames


谢谢你把它整理好。我改变了一些东西,所以现在只有4页,如清单所示。我运行脚本,但只有第一个页面是Trip副本,其他页面都没有副本,它们都有数据,因为我粘贴了一些以进行检查。你也可以解释一下,或者给我指一指解释var i=0这条线的地方。。。。。。谢谢,我试过搜索,但找不到解释,只有很多例子。@Paul,不知道为什么脚本不起作用。我怀疑可能是工作表名称不匹配?看看这两张纸。输入工作表包含脚本和用于调用脚本的自定义菜单。和var i=0是for循环的计数器。在我看来,这个脚本不太适合您的需要。联系我:jamesd,地址:nairongschool.com
function onOpen() { // This function adds a custom menu to the spreadsheet (Backup to archive) so you can run the script from there.

var ui = SpreadsheetApp.getUi();

    ui.createMenu('Backup to archive')
    .addItem('Backup', 'dataBackup')
    .addToUi();
}

function dataBackup() {

    var inputSS = SpreadsheetApp.openById('1wglM4-5jx873vwtFRPVgC1qk27JjrsYjDwp0fNpl5Xg'); // The file ID of the Input sheet
    var archiveSS = SpreadsheetApp.openById('146WU8RghfFqlCpCSX7n6kBAKOyxcpVKt14yhVfvYz-g'); // The file ID of the archive sheet

    // The names of the sheets to be copied.
    // NOTE: These names must match the names of the sheets in BOTH spreadsheets i.e. the same case the spelling and the same spaces.
    var sheetNames = ['AM trip', 'PM trip', 'Pool / Beach', 'Night Dive'];

    for (var i = 0; i < sheetNames.length; i++) { // Loop to each sheet listed in 'var sheetNames' and copy the data.

        var inputSheet = inputSS.getSheetByName(sheetNames[i]);
        var archiveSheet = archiveSS.getSheetByName(sheetNames[i]);

        var data = inputSheet.getRange('B7:U38').getValues();

        archiveSheet.getRange(archiveSheet.getLastRow() + 1, 2, data.length, data[0].length).setValues(data);
    }
}