Loops 在Google工作表中复制和粘贴移动范围

Loops 在Google工作表中复制和粘贴移动范围,loops,google-apps-script,copy-paste,Loops,Google Apps Script,Copy Paste,我仍在学习脚本编写的基础知识,但我有一个相当具体的问题,我还没有找到解决方案——可能是因为我的措辞有误 本质上,在MS表中,我有一个数据范围A2:O23,其中包含我希望保持固定不变的公式,总是在不同的表中引用相同的范围 我的目标是,在脚本运行时,这个公式块将从同一列[a:O]中的下一个空行复制并粘贴,而上一个A2:O23块将复制并粘贴自身作为值 然后,每次脚本运行时,它都会执行相同的操作,将包含22行的最新块复制到自身下方,并将自身粘贴为值。基本上具有构建一个长数据列表的效果,最新读取的最低范围

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

本质上,在MS表中,我有一个数据范围A2:O23,其中包含我希望保持固定不变的公式,总是在不同的表中引用相同的范围

我的目标是,在脚本运行时,这个公式块将从同一列[a:O]中的下一个空行复制并粘贴,而上一个A2:O23块将复制并粘贴自身作为值

然后,每次脚本运行时,它都会执行相同的操作,将包含22行的最新块复制到自身下方,并将自身粘贴为值。基本上具有构建一个长数据列表的效果,最新读取的最低范围是公式,以上所有内容都是值

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

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

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


谢谢

如果我理解正确,您希望:

将图纸列A到O的最后22行复制到包含的下22行。 仅将值复制/粘贴到原始范围。 如果上述内容正确,则可以将以下代码复制并运行到绑定到电子表格的脚本中。请参阅内联注释,以了解有关代码正在执行的操作的详细信息,一步一步:

函数值{ var ss=电子表格app.getActive; var sheet=ss.getSheetByNameMS;//必要时更改工作表的名称 var lastRow=sheet.getLastRow; var firstCol=1;//要复制的第一列 var numCols=15;//要复制的列数 var numRows=22;//要复制的行数 如果lastRow>numRows{//请检查工作表中是否至少有23行内容,否则在复制范围时会出现错误 var originRange=sheet.getRangelastRow-numRows+1,第一列,numRows,numCols; var destRange=sheet.getRangelastRow+1,第一列,numRows,numCols; originRange.CopyToDistange;//使用公式复制到下22行 originRange.copyTooriginRange,{contentsOnly:true};//仅将值复制到同一范围 } } 这里要注意的主要方法是copyTo,它可以用来复制数据,或者通过设置参数{contentsOnly:true}也可以使用


我希望这会有所帮助。

因此您不需要脚本将最后22行复制到下22行。是吗?在某种程度上。我认为把它分为两个部分,或者把它分成两个函数是有意义的。第一种方法是向下复制上一个范围,如您所说是22行16列。第二部分是复制前一个范围,并将其作为值粘贴到其自身上,这样它就不再是公式,并且在源数据发生更改时无法更改。我希望这有点道理,但我想我能理解你对我的兴趣。您不希望复制最后22行,然后作为公式粘贴到接下来的22行,然后作为值粘贴到它们上面。这就是你想要的,对,就是这样。我想我只是表达得很糟糕。你有22行公式来测试它吗?嗨,库珀。谢谢,但不幸的是,它似乎没有改变任何事情。在回答您之前的评论时,是的,目前有22行数据。将公式复制到下面的单元格后,我希望将这些行作为值覆盖。我认为这些问题与我的解释有关。如果我和你共享文件的访问权限会有帮助吗?谢谢你的努力,兰布利库斯。我试过了,但它似乎没有改变任何东西,这很奇怪,因为它对我来说非常有意义,尤其是那些笔记,它们对学习很有帮助。你也正确地理解了这个问题。可能是我的解释有点不对劲,在这种情况下,我很乐意与您分享该文档,如果这有助于发现问题的话?@Geg是您的工作表,名为MS?如果不是这样,请在我提供的代码中将名称改为yours。@Geg这很奇怪,因为我试过了,它对我有效。脚本是否绑定到电子表格?如果是这样的话,请考虑共享一个电子表格的副本,以避免敏感信息,这样我就可以尝试复制这个。@ GEG确保在你想要复制的数据中没有包含内容的行,例如,带有消息粘贴的绿色单元格,这里的公式会与脚本混淆。如果你记录了l 对于包含脚本内容的ast行,它返回索引346,该行中必须有一些内容。可以肯定的是,请删除23之后的所有行并重新创建它们,只是清除它们不起作用。另外,正如我所看到的,如果您只需要ao列,numCols应该是15,而不是在我的响应中更改它。复制P列也会带来问题
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);
  }      
}