OnOpen或时间触发器 - 如果满足2个条件,则将行移动到另一个电子表格

时间:2014-11-19 17:17:57

标签: google-apps-script google-sheets

我的经验很少,实际上几乎没有经验,所以我的一些术语就是最近才出现的' herd'不知道。

我有两张Spreadsheets,其中1张相同的名称相同。

电子表格"制作"表" Master" - 表格ID为1goG0TS1_2jwlGRetREYNRVk-Q6TEy3iWG_5VXFoZlus

电子表格" Archived_Production" "万事达" - 表格ID为1Mr4LJmp1SmpDs1i8U_PE5uLOEVjLc599Vq87m9HwCx0

使用onOpen脚本,或者可能是定时触发器,设置在我的" Production"电子表格我需要将所有行移动到我的" Archived_Production"满足2个标准的电子表格

标准1 - B栏中的日期比当前日期早7天

但是,如果还是

标准2 - 列O中的条目是" 100%"

在随附的屏幕截图示例中,今天的日期是2014年11月19日,只有第一个以黄色突出显示的条目会在下次打开电子表格时被移动。

一如既往地感谢您提前寻求帮助。

抱歉,还没有足够的帖子允许图片上传,但希望文字解释。

1 个答案:

答案 0 :(得分:0)

您可以使用此功能在onOpen()脚本上执行操作。

function onOpen() {
  // I moved data from sheet1 to sheet2

  var production_sheet_id = 'Put your production sheet's id here';  // This is your source sheet
  var archived_sheet_id = 'Put your archived sheet's id here';   // This is your destination sheet
  var sheet1 = SpreadsheetApp.openById(production_sheet_id).getSheets()[0];
  var sheet2 = SpreadsheetApp.openById(archived_sheet_id).getSheets()[0];

  var rows = sheet1.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  for (var i = 0; i < numRows; i++) {
    var oldDate = values[i][1];     // or var oldDate =  new Date('values[i][1]')
    var curDate = new Date();

    // Count time difference in milliseconds, convert them into days then.
    var diffInMilliSecs = (curDate.getTime() - oldDate.getTime());
    var diffInDays = diffInMilliSecs/1000/60/60/24;
    var diffInDays = Math.round(diffInDays);

    if(values[i][14] == 1.0 && Math.abs(diffInDays+30) >= 7)  // It evaluates 100% to 1.0
      sheet2.appendRow(values[i]);
  }
}