Javascript Google Sheets应用程序脚本复制数据行(如果日期与选项卡名称相同)

Javascript Google Sheets应用程序脚本复制数据行(如果日期与选项卡名称相同),javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我找到了一些几乎可以满足我需要的代码,并尝试使用它来让它工作,但运气不好。我得到一个导出,每行最后一列都有日期 我只想将日期的最后一列行复制到具有相同名称的选项卡上 function MoveDate_FourthDEC() { var ss=SpreadsheetApp.getActive(); var sh1=ss.getSheetByName("Import"); var sh2=ss.getSheetByName("4/12/2020"); var

我找到了一些几乎可以满足我需要的代码,并尝试使用它来让它工作,但运气不好。我得到一个导出,每行最后一列都有日期

我只想将日期的最后一列行复制到具有相同名称的选项卡上

function MoveDate_FourthDEC() {
var ss=SpreadsheetApp.getActive();
var sh1=ss.getSheetByName("Import");
var sh2=ss.getSheetByName("4/12/2020");
var rg1=sh1.getRange(2,1,sh1.getLastRow(),32);//starting at column2
var data=rg1.getValues();
for(var i=0;i<data.length;i++) {
// 13 = collected should be in this column which is column N
if(data[i][31]=="4/12/2020") {
sh2.appendRow(data[i]);
}}}
函数MoveDate\u FourthDEC(){
var ss=SpreadsheetApp.getActive();
var sh1=ss.getSheetByName(“导入”);
var sh2=ss.getSheetByName(“4/12/2020”);
var rg1=sh1.getRange(2,1,sh1.getLastRow(),32);//从第2列开始
var data=rg1.getValues();
对于(变量i=0;i解释:
  • 您的目标是复制列
    AF
    与工作表名称匹配的所有行

  • 首先,您可以使用迭代每个工作表。对于每个工作表,您需要检查工作表名称是否与列
    AF
    中的日期匹配。如果匹配,则只需将列
    AF
    中包含此日期的行存储到临时数组中:

    let temp_data=data.filter(r=>r[31]==sh.getName());

  • 然后,您可以高效地将所有相关行复制并粘贴到匹配的工作表中:

sh.getRange(sh.getLastRow()+1,1,临时数据。长度,临时数据[0]。长度)。设置值(临时数据);


旁注:

    >P>在处理日期对象时,需要考虑表中的显示值。这就是为什么我使用而不是.< /P>
  • 由于
    data
    从第二行开始,您需要从最后一行内容中减去一行,以获得正确的范围:

    getRange(2,1,sh1.getLastRow()-1,32)

  • 我正在使用检查工作表名称是否与最后一列匹配。要使用
    includes
    ,需要对
    getDisplayValues
    函数返回的2D数组进行排序


解决方案: 说明:
  • 您的目标是复制列
    AF
    与工作表名称匹配的所有行

  • 首先,您可以使用迭代每个工作表。对于每个工作表,您需要检查工作表名称是否与列
    AF
    中的日期匹配。如果匹配,则只需将列
    AF
    中包含此日期的行存储到临时数组中:

    let temp_data=data.filter(r=>r[31]==sh.getName());

  • 然后,您可以高效地将所有相关行复制并粘贴到匹配的工作表中:

sh.getRange(sh.getLastRow()+1,1,临时数据。长度,临时数据[0]。长度)。设置值(临时数据);


旁注:

    >P>在处理日期对象时,需要考虑表中的显示值。这就是为什么我使用而不是.< /P>
  • 由于
    data
    从第二行开始,您需要从最后一行内容中减去一行,以获得正确的范围:

    getRange(2,1,sh1.getLastRow()-1,32)

  • 我正在使用检查工作表名称是否与最后一列匹配。要使用
    includes
    ,需要对
    getDisplayValues
    函数返回的2D数组进行排序


解决方案:
马里奥我非常感谢你花这么多时间来做这件事非常感谢你花这么多时间来做这件事非常感谢
function MoveDate_FourthDEC() {

const ss = SpreadsheetApp.getActive();
const sh1 = ss.getSheetByName("Import");
const shs = ss.getSheets();
const dts = sh1.getRange('AF2:AF'+sh1.getLastRow()).getDisplayValues().flat();
const data=sh1.getRange(2,1,sh1.getLastRow()-1,32).getDisplayValues();
shs.forEach(sh=>{
if (dts.includes(sh.getName())){
let temp_data = data.filter(r=>r[31]==sh.getName());
sh.getRange(sh.getLastRow()+1,1,temp_data.length,temp_data[0].length).setValues(temp_data);
}});
}