在复制到新工作表之前如何检查单元格是否为空?

时间:2019-05-07 17:33:11

标签: google-apps-script google-sheets

我想将一行数据复制到一个新的工作表上,但前提是输入数据的日期是今天之前,并且该行中的两个单元格中的任何一个包含信息。 我的代码当前可以通过检查输入日期的单元格来确定今天之前的日期,然后将行成功复制到新工作表中,并从其所在的行中将其删除。我目前在添加代码以检查其他两个单元格是否为空白时遇到麻烦。如果两个单元格都为空白,则我希望代码跳过该行并继续到下一行,并将检查该行的日期以及两个单元格等。如果其中一个单元格包含数据并且日期在今天之前,我希望代码将整行复制到另一张纸上。仅供参考,我的数据从电子表格的第5行开始。

    function DailyTransfer() {
    var Sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily Overview");
      var CopyTo =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("2019 YTD");
      var ColumntoSearch = 2;
      var ColumntoSearch2 = 21;
      var ColumntoSearch3 = 25;
      var LastRow = Sheet.getLastRow();

    //Gets column to search for dates to compare to Today
      var Range = Sheet.getRange(5, ColumntoSearch, LastRow, 1);
      var Values = Range.getValues();

    //Sets the amount of data to copy over
      var NumberofColumns = 27;
      var NumberofRows = 1;
      var DestRow = CopyTo.getLastRow()+1;

    //Compares all the dates the information was entered in the Daily Overview tab to Today
      var dt=new Date();
      var dv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
      var d=0;

      for(var i=0;i<Values.length;i++) {
        var Check1 = Sheet.getRange(i-d+5, ColumntoSearch2).getCell; //check first cell
        var Check2 = Sheet.getRange(i-d+5, ColumntoSearch3).getCell; //check second cell
        if(Approved.isBlank()){ //If Check1 is blank, go Check2
         if (Denied.isBlank()){
            i+1}} //If Check1 and Check2 are blank, go to next row
    //If either of Check1 or Check2 contains data, copy that row of data to a new sheet. 
//If both Check1 and Check2 are blank, the row is skipped and the next row is
// checked. This is the part I'm having trouble on. I think I need to close my
// loop here, or create a loop within a loop?
        else {
          if(new Date(Values[i][0]).valueOf()<dv){
          var RangetoCopy=Sheet.getRange(i-d+5,1,NumberofRows,NumberofColumns); 
          var DestRange=CopyTo.getRange(CopyTo.getLastRow()+1,1,NumberofRows,NumberofColumns);
          RangetoCopy.copyTo(DestRange);
          Sheet.deleteRows(i-d+5);
            d++;}}}

1 个答案:

答案 0 :(得分:0)

尝试一下:

function DailyTransfer() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("Daily Overview");
  var dsh=ss.getSheetByName("2019 YTD");  
  var rg1=sh.getRange(5,2,sh.getLastRow()-4, 1);
  var rg2=sh.getRange(5,21,sh.getLastRow()-4,1);
  var rg3=sh.getRange(5,25,sh.getLastRow()-4,1);
  var vA1=rg1.getValues();
  var vA2=rg2.getValues();
  var vA3=rg3.getValues()
  var dt=new Date();
  var dv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
  var d=0;
  for(var i=0;i<vA1.length;i++) {
    if((new Date(vA1[i][0]).valueOf()<dv) && (vA2[i][0] || vA3[i][0])) {
      var RangetoCopy=sh.getRange(i-d+5,1,1,27); 
      var DestRange=dsh.getRange(dsh.getLastRow()+1,1,1,27);
      RangetoCopy.copyTo(DestRange);
      sh.deleteRow(i-d+5);
      d++;
    }
  }
}