2

以下の Google Apps スクリプトは、一部のイベントのみを発生させます。たとえば、列 16 を X に変更すると、列 17 が正しく更新されます。しかし、次に列 16 の X を削除すると、列 17 の日付が削除されますが、fontcolor ( dataRangeAll.setFontColor(false)in colorRow(r)) はリセットされません。ただし、フォントカラーのリセットは、それ自体であれば機能します。

2 つのイベントを次々に実行することに問題があるのでしょうか、それとも以下のコードが何らかの形で間違っているのでしょうか?

スプレッドシートの例は、ここにあります

function setDate(r){
  var sheet = SpreadsheetApp.getActiveSheet();

  var dataRange = sheet.getRange(r, 1, 1, 17);

  var data = dataRange.getValues();
  var row = data[0];


  var date = new Date();
  date.setHours(0);
  date.setMinutes(0);
  date.setSeconds(0);
  //Logger.log(date);

  var Sdate = Utilities.formatDate(date,'GMT+0100','yyyy-MM-dd')


  if(row[2] != ""){ 
    sheet.getRange(r,12).setValue(Sdate);
  } else if(row[2] == ""){ 
    sheet.getRange(r,12).setValue("");
  }

  SpreadsheetApp.flush(); 

}

function setDate2(r){
  var sheet = SpreadsheetApp.getActiveSheet();

  var dataRange = sheet.getRange(r, 1, 1, 17);

  var data = dataRange.getValues();
  var row = data[0];


  var date = new Date();
  date.setHours(0);
  date.setMinutes(0);
  date.setSeconds(0);
  //Logger.log(date);

  var Sdate = Utilities.formatDate(date,'GMT+0100','yyyy-MM-dd')


  if(row[15] != ""){ 
    sheet.getRange(r,17).setValue(Sdate);
  } else if(row[15] == ""){ 
    sheet.getRange(r,17).setValue("");
  }

  SpreadsheetApp.flush(); 

}


function colorRow(r){
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange(r, 12, 1, 6);
  var dataRangeAll = sheet.getRange(r, 1, 1, 17);

  var data = dataRange.getValues();
  var row = data[0];

  var date = new Date();
  date.setHours(0);
  date.setMinutes(0);
  date.setSeconds(0);
  //Logger.log(date);
  var sheetDate = new Date(row[0]);

  var Sdate = Utilities.formatDate(date,'GMT+0100','yyyy-MM-dd')
  var SsheetDate = Utilities.formatDate(sheetDate,'GMT+0100', 'yyyy-MM-dd')

  dataRangeAll.setFontLine(false);

  //Om faktura har skickats
  if(row[4] != ""){ 
    dataRangeAll.setFontLine("line-through");
    dataRange.setBackgroundRGB(255, 255, 255);
    dataRangeAll.setFontColor('#cccccc');

  //Om faktura inte har skickats och fakturadatum har uppnåtts  
  }else if(row[0] != "" && Sdate >= SsheetDate && row[4] == ""){ 
      dataRange.setBackgroundRGB(255, 170, 86);
      dataRange.setFontColor('#000000');
      dataRangeAll.setFontColor(false);

  //Om faktura inte har skickats, men fakturadatum är tomt  
  }else if(row[0] == ""){ 
    dataRange.setBackgroundRGB(255, 255, 255);
    dataRange.setFontColor('#cccccc');
    dataRangeAll.setFontColor(false);

  //Om faktura inte har skickats, men fakturadatum inte har uppnåtts
  }else{ 
    dataRange.setBackgroundRGB(255, 255, 255);
    dataRange.setFontColor('#777777');
    dataRangeAll.setFontColor(false);
  }




  SpreadsheetApp.flush(); 
}


function onEdit(event)
{
  var r = event.source.getActiveRange().getRowIndex();
  if (r >= 3) {

    var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

    //När en produktion markeras som klar eller inte
    var watchColumn = 3;   //A=1, B=2, C=3...  
    var activeColumn = ss.getActiveCell().getColumn();

    if (activeColumn == watchColumn){  //only run if change in watch column 
      setDate(r);
    }

    //När en faktura markeras som skickad eller inte
    var watchColumn2 = 16;   //A=1, B=2, C=3... 
    var activeColumn2 = ss.getActiveCell().getColumn();

    if (activeColumn2 == watchColumn2){  //only run if change in watch column 
      setDate2(r);
    }

    colorRow(r);
  }
}
4

0 に答える 0