首页 > 解决方案 > 将单行导出到新工作表而不覆盖的宏

问题描述

所以标题几乎说明了一切。我有一个带有下拉列表、公式等的动态行,我想将该行的值导出到新工作表,而不覆盖我设法做到的先前导出的行(覆盖)。所以我会制作宏,使用它,它只会将值粘贴到以前的导出中。谁能帮我这个?这是我的宏顺便说一句,以防有人需要它。

function Export2() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A2:J2').activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('TVDB'), true);
  spreadsheet.getRange('A2').activate();
  spreadsheet.getRange('TV!A2:J2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};

标签: google-apps-scriptgoogle-sheets

解决方案


您正在复制到spreadsheet.getActiveRange()- 这意味着到主动选择的范围

如果要复制到第一个空行,则需要使用 Apps Script 方法getLastRow()修改代码

重要的:

在使用该方法getLastRow()时,一般来说,复制工作表时,建议您将这些方法应用于选定的sheet,而不是spreadsheet为了避免出现问题。

样本:

function Export2() {
  var spreadsheet = SpreadsheetApp.getActive();
  var originSheet = spreadsheet.getSheetByName("TV");
  var destinationSheet = spreadsheet.getSheetByName('TVDB');
  var lastRow = destinationSheet.getLastRow();
  originSheet.getRange('A2:J2').copyTo(destinationSheet.getRange(lastRow +1, 1), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};

我建议您花一些时间查看Apps 脚本文档,以便更好地理解代码并在需要时进行修改。请注意,录制宏通常不会产生最有效和最优雅的代码。


推荐阅读