5

日付に従って条件付きでフォーマットしたいスプレッドシートがあります。日付が 7 日先の場合はセルを赤くしたい、日付が 14 日先の場合はセルを緑にしたいなど。

これを行うための最初のステップは、単純な条件付き書式スクリプトを作成することであり、日付が今日の場合は強調表示されると思いました。しかし、私のコードは機能しません:(

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); // get the sheet
  var columnF = sheet.getRange(2, 6, sheet.getLastRow()-1, 1); // get all the rows
  var fValues = columnF.getValues(); // get the values
  var today = Utilities.formatDate(new Date(), "GMT", "MM/dd/yyyy"); // get today's date
  for (var i = 0; i < fValues.length; i++) { // repeat loop
    if (fValues[i][0] == today) { // if the date in the cell is today's date...
      sheet.getRange(i + 2, 6, 1, 1).setBackgroundColor('green'); // ...turn that cell green
    }
  }
}

私は何を間違っていますか?

ありがとう!

4

3 に答える 3

5

日付を文字列に変換しないでください。Srik の回答のように日付を日、月、年で解析できます。または、以下のようにネイティブ値を使用して日付を比較することもできます。他の日付の計算が簡単になります... I数学を単純化するためにいくつかの変数を作成しました:

day= 1 日のミリ秒数

today= 今日の日付 00:00 (日)

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); // get the sheet
  var columnF = sheet.getRange(2, 6, sheet.getLastRow()-1, 1).setBackgroundColor('white'); // get all the rows and clear colors
  var fValues = columnF.getValues(); // get the values
  var day = 24*3600*1000
  var today = parseInt((new Date().setHours(0,0,0,0))/day); // get date today
  for (var i = 0; i < fValues.length; i++) { // repeat loop
    var dataday = parseInt(fValues[i][0].getTime()/day)
    Logger.log(dataday+' = '+today)
    if (dataday == today-7) {sheet.getRange(i + 2, 6, 1, 1).setBackgroundColor('red')}
    else if (dataday == today-14){sheet.getRange(i + 2, 6, 1, 1).setBackgroundColor('green')}
    else if (dataday == today-21){sheet.getRange(i + 2, 6, 1, 1).setBackgroundColor('blue')}
  }
}

お試しシートはこちら

于 2013-01-16T07:08:39.883 に答える
3

Date オブジェクトを直接比較することはできません。日、月、年ごとに比較する必要があります。次のようなものを試してください

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); // get the sheet
  var columnF = sheet.getRange(2, 6, sheet.getLastRow()-1, 1); // get all the rows
  var fValues = columnF.getValues(); // get the values
  var today = new Date(); 
  for (var i = 0; i < fValues.length; i++) { // repeat loop
    var fDate = new Date(fValues[i][0]);
    if (fDate.getDate() == today.getDate() && 
        fDate.getMonth() == today.getMonth() && 
        fDate.getFullYear() == today.getFullYear()) { // if the date in the cell is today's date...
      sheet.getRange(i + 2, 6, 1, 1).setBackgroundColor('green'); // ...turn that cell green
    }
  }
}
于 2013-01-16T05:12:48.157 に答える