0

特定の日付からの経過日数をセルに入れる方法。例えば:

列 1: 12/05/2013 18:00:00 関数 New Date() を使用した実際の日数 列 2: スクリプトは日数を挿入します (今日 - 列 1) = 4

スクリプトは、今日からの経過日数を列 2 に挿入する必要があります。今日は 2013 年 5 月 16 日 23:00 で、スクリプトは 4 を挿入します。

助けていただければ幸いです。

その関数は友人から渡されましたが、日付がミリ秒単位ではないため機能しないと思いますが、セルの結果は日数でなければなりません

    }
    function formatting2(event) {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // get the sheet
      var columnF = sheet.getRange(2, 1, sheet.getLastRow()-1, 1);
      var updateage = sheet.getRange(2, 2, sheet.getLastRow()-1, 1);
      var fValues = columnF.getValues(); // get the values
      var result = new Date();

      updateage.setValue(result-fValues)
    }  
4

1 に答える 1

1

これはあなたが望む結果を得る可能な方法です。私はそれをカスタム関数として書きました。つまり、フォームに表示したいセルに配置する必要があります=dayToToday()

これは、中間値を示すためのいくつかのログとコメントを含むスクリプトです。

function dayToToday(x){
  var sh = SpreadsheetApp.getActiveSheet();
  Logger.log(sh.getActiveCell().getRowIndex())
  var refcell = sh.getRange(sh.getActiveCell().getRowIndex(),1).getValue();;// get value in column A to get the reference date
  var refTime = new Date(refcell);
  var ref = refTime.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var today = new Date();
  var TD = today.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var day = parseInt(TD-ref);// get the difference in days (integer value )
  return day ; // return result that will be in cell
}

編集: あなたのユースケースを理解したら、カスタム関数のアプローチを放棄することをお勧めします(私はそれがあまり好きではないので、私は決して使用しません)、タイマートリガーおよび/またはメニューを使用して値を更新するこのソリューションに進みますスプレッドシートを 1 つのバッチにまとめます。

(ps : すぐに回答できなくて申し訳ありません... 最近忙しすぎます :-)

function onOpen() {
  var menuEntries = [ {name: "test function", functionName: "toTrigger"},
                     ];
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.addMenu("test menu",menuEntries);//
}

// create a timer trigger that will call "toTrigger" every 15 minutes

function toTrigger(){
  var sh = SpreadsheetApp.getActiveSheet();
  var data = sh.getRange(1,1,sh.getLastRow(),2).getValues();
  for(var n=0;n<data.length;++n){
  if(typeof(data[n][0])=='object'){
    data[n][1]=dayToToday(data[n][0])
      }
    }
   sh.getRange(1,1,sh.getLastRow(),2).setValues(data) 
}




function dayToToday(x){
  var refcell = x;;// get value in column A to get the reference date
  var refTime = new Date(refcell);
  var ref = refTime.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var today = new Date();
  var TD = today.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var day = parseInt(TD-ref);// get the difference in days (integer value )
  return day ; // return result that will be in cell
}

2番目の編集:

使用時var data = sh.getRange(1,1,sh.getLastRow(),2).getValues();

getRange の数値は開始行、開始列、行数、列数であるため、必要な列を含む範囲を取得し、 data [n][columnNumber-1] を使用して対応する値を取得する必要があります. (-1 配列は 0 から始まり、列は 1 からカウントされるため (実際には A ですが、A は最初の列です ;-)) 変数参照が必要な場合は、2 つの変数 (参照と参照) を受け入れるように関数を変更する必要があるため、お知らせください。別のもの)。


最後の編集(願っています)

いくつかの詳細を変更しました... J と F に対応する [9] と [5] のインデックスを参照してください

function toTrigger(){
  var sh = SpreadsheetApp.getActiveSheet();
  var data = sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn()).getValues();
  for(var n=0;n<data.length;++n){
  if(typeof(data[n][9])=='object'){
    data[n][5]=dayToToday(data[n][9])
      }
    }
   sh.getRange(1,1,data.length,data[0].length).setValues(data) 
}

更新/編集

数時間の結果 (コメントのリクエストに続く)

function hoursToToday(x){
  var refcell = x;;// get value in column A to get the reference date
  var refTime = new Date(refcell);
  var refhrs = refTime.getHours();
  var ref = refTime.setHours(refhrs,0,0,0)/3600000;// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var today = new Date();
  var todayHrs = today.getHours()
  var TD = today.setHours(todayHrs,0,0,0)/3600000;// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var hrs = TD-ref;// get the difference in days (integer value )
  return hrs ; // return result that will be in cell
}

于 2013-05-17T06:22:32.607 に答える