apps脚本-复制手动选择的,不相邻的行,并将它们粘贴在彼此的下面



我想复制手动选择/突出显示的非相邻行,并将它们直接粘贴在另一个工作表("战斗列表raw")使用下面的脚本,只要行相邻,它就可以正常工作。如果行不相邻,则只粘贴一行(最后选择的行/光标所在的行)。

有人知道如何管理它吗?

function copynonadjacent rows() {
SpreadsheetApp.flush();  
var ss = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.getActiveSpreadsheet();
var source_sheet = ss.getActiveSheet();
var source_range = source_sheet.getActiveRange();
var target_sheet = target.getSheetByName("fight list raw");
var last_row = target_sheet.getLastRow();
target_sheet.insertRowsAfter(last_row,1);
source_range.copyTo(target_sheet.getRange("A"+(last_row+1+":AA"+(last_row+1))),{contentsOnly:true});
}

非常感谢!

从您以下的回复,

我想复制第2行和第4行。当我通过单击行号选择这两行并运行脚本时,只有行号4被复制。

但是如果我选择第2行和第3行(因此它们之间没有行),脚本将复制这两行。在目标工作表中,行之间没有行,而行之间是相互粘贴的。当我复制第2行和第4行时,我想用同样的方法。

在脚本中,您使用var source_range = source_sheet.getActiveRange();。我想这可能是你的问题的原因。在这种情况下,下面的修改如何?

修改脚本:

function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Source sheet.
var source_sheet = ss.getActiveSheet();
var source_ranges = source_sheet.getActiveRangeList().getRanges();
var values = source_ranges.flatMap(r => r.getValues());
var len = values.length;
// Target sheet.
var target_sheet = ss.getSheetByName("fight list raw");
var last_row = target_sheet.getLastRow();
target_sheet.insertRowsAfter(last_row, len);
target_sheet.getRange(last_row + 1, 1, len, values[0].length).setValues(values);
}
  • 当此脚本运行时,将检索选中的行,并将值复制到目标表。
  • 我以为你用的是{contentsOnly:true}。因此,我认为getValuessetValues可能可以使用。参考:

  • getActiveRangeList ()

最新更新