在 Google 张中复制和粘贴移动极差

Copy and Pasting a Moving Range in Google Sheets

我仍在学习脚本编写的基础知识,但我有一个相当具体的问题,我一直无法找到解决方案 - 可能是因为我可能措辞错误。

本质上,在 sheet MS 中,我有一系列数据 (A2:O23),其中包含我希望保持固定的公式(例如,始终引用相同的范围一个不同的 sheet).

我的目标是,在脚本的 运行 处,这个公式块将从下一个空行(在相同的列 [A:O] 中)复制并粘贴,并且前一个块 (A2:O23) 将复制并粘贴自身作为值。

然后,每次脚本 运行s,它都会做同样的事情,将最新的 22 行块复制到其下方并将其自身粘贴为值。本质上具有构建一长串数据的效果,其中最新(读取最低)范围是公式,以上都是值。

例如,第一次 运行 的结果应该是 A24:O45 现在显示相同的公式,而 A2:O23 仅显示为值。下一次,A24:O45 将被冻结为值,A46:O67 现在是公式。

我不确定这是否需要使用循环或有不同的方法来实现效果,但前者是我没有使用过的东西,后者对我来说仍然是个谜。

我知道这可能不是特别清楚,但我很乐意回答任何问题,并非常感谢为提供帮助所做的任何努力。

谢谢

function copypastepaste() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rows=sh.getLastRow();
  if(rows>22) {
    var rg=sh.getRange(sh.getLastRow()-21,1,22,16);
    var vA=rg.getDisplayValues();
    var fA=rg.getFormulas();
    var nrg=sh.getRange(sh.getLastRow()+1,1,22,16);
    nrg.setFormulas(fA);
    rg.setValues(vA);
  }      
}

如果我理解正确的话,你想要:

  • 将 sheet 的最后 22 行(第 AO 列)复制到接下来的 22 行(包括公式)。
  • Copy/paste 到原始范围仅作为值。

如果以上是正确的,那么您可以将以下代码复制并运行到绑定到您的传播的脚本中sheet(请参阅内联注释以了解代码正在做什么的详细信息,步骤逐步):

function copyPasteValues() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName("MS"); // Name of your sheet (change if that's necessary)
  var lastRow = sheet.getLastRow();
  var firstCol = 1; // First column to copy
  var numCols = 15; // Number of columns to copy
  var numRows = 22; // Number of rows to copy
  if (lastRow > numRows) { // Check if the sheet has at least 23 rows with content (otherwise it would give error when copying the range)
    var originRange = sheet.getRange(lastRow - numRows + 1, firstCol, numRows, numCols);
    var destRange = sheet.getRange(lastRow + 1, firstCol, numRows, numCols);
    originRange.copyTo(destRange); // Copying with formulas to next 22 rows
    originRange.copyTo(originRange, {contentsOnly:true}); // Copying only values to same range
  }
}

这里主要注意的方法是copyTo,可以原样复制数据,with formulas included, or values only, by setting the parameter {contentsOnly:true} (copyValuesToRange也可以。

希望对您有所帮助。