Google Apps脚本-将包含当日日期的行从一个工作表复制到另一个工作表

时间:2019-05-22 16:51:40

标签: google-apps-script google-sheets

我要做的是在一个电子表格中,查看工作表“源”,如果B列中的单元格包含今天的日期,则在A:B之间复制该单元格的单元格,然后粘贴到工作表中的下一个空行中“目的地”。

重复所有包含今天日期的单元格。

如果我正在寻找文本,这是可行的,但实际上,我试图在日期更改时每天自动运行此命令,而我无法使date函数正常工作。

本质上讲,它每天都会从另一张自动工作表中复制今天的数据,并将其从另一张工作表中的昨天数据粘贴到下一行。

我对所有这些都是新手,任何帮助将不胜感激。

+

我得到的错误是:

TypeError:无法从未定义中读取属性“ length”。 (第20行,文件“首次测试”)

Picture of the type of data I want to copy

2 个答案:

答案 0 :(得分:0)

尝试一下:

function copy_test() {
  var ss=SpreadsheetApp.getActive();
  var ssh=ss.getSheetByName("Source");
  var dsh=ss.getSheetByName("Destination");
  var rg=ssh.getRange(1,1,ssh.getLastRow(),3);//I just took the first three columns instead
  var vA=rg.getValues();
  var dt=new Date();
  var today=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();//midnight
  for(var i=0;i<vA.length;i++) {
    var d=new Date(vA[i][1]);//column B
    if (new Date(d.getFullYear(),d.getMonth(),d.getDate()).valueOf() == today) {
      dsh.appendRow(vA[i]);
    }  
  }
}

答案 1 :(得分:0)

以防将来有人遇到此问题。我弄乱了原始代码,并设法使其起作用:

function copyrange() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Source'); //source sheet
  var testrange = sheet.getRange('B:B');
  var testvalue = (testrange.setNumberFormat("@").getValues());
  var ds = ss.getSheetByName('Destination'); //destination sheet
  var data = [];
  var j =[];
  var dt = new Date();
  var today = Utilities.formatDate(new Date(), 'GMT-0', 'dd/MM/yyyy')

  //Condition to check in B:B, if true, copy the same row to data array 
  for (i=0;i<testvalue.length;i++) {
    if (testvalue[i] == today) {
    data.push.apply(data,sheet.getRange(i+1,1,1,3).getValues());
  //Copy matched ROW numbers to j
    j.push(i);
}  
}
  //Copy data array to destination sheet
  ds.getRange(ds.getLastRow()+1,1,data.length,data[0].length).setValues(data);
}

特别是var testvalue,我在setNumberFormat中以文本形式添加了日期,因为这是它适用于if (testvalue[i] == today)的唯一方式

感谢@Cooper对此一枪。