2017-03-22 10 views
0

A:開始日時と終了日時の2つの列(A & B)を読み込むスプレッドシートのスクリプトを作成しようとしています。 +時間。日付は同じ日ですが、プログラムからエクスポートして取得します。google-apps-scriptスプレッドシート複数の行から開始時刻と終了時刻を取得する

私がこれで何をしようとしているのは、月の最初の日からのすべての行を集め、開始時刻を取得し、最後の行から終了時刻を取得します。 1日の行数は動的です。 1日あたり、開始はセルに入り、終了はセルに入ります。この日あたりの値をフィルタリングで行き詰まってスタート

Example of sheet

:コードの下

function hourCalculator() 
{ 
    var SSA = SpreadsheetApp.getActiveSpreadsheet(), 
     sheet = SSA.getSheetByName("Example"), 
     data = sheet.getDataRange() 
        .getValues(); 

    for (var i = 1; i < data.length; ++i) { 
    var day = 1, 
     maxDay = 32, 
     row = data[i], 
     actualSDay = new Date(row[0]), 
     actualSDateString = Utilities.formatDate(actualSDay, 'Amsterdam', 'dd-MM-yyyy'), 
     actualSDayNumber = Utilities.formatDate(actualSDay, 'Amsterdam', 'd'), 
     actualSTimeString = Utilities.formatDate(actualSDay, 'Amsterdam', 'HH:mm'), 
     actualEDay = new Date(row[1]), 
     actualEDateString = Utilities.formatDate(actualEDay, 'Amsterdam', 'dd-MM-yyyy'), 
     actualEDayNumber = Utilities.formatDate(actualEDay, 'Amsterdam', 'd'), 
     actualETimeString = Utilities.formatDate(actualEDay, 'Amsterdam', 'HH:mm'), 
     startDayNumber = Number(actualSDayNumber), 
     endDayNumber = Number(actualEDayNumber), 
     writeStart = row[6], 
     writeStop = row[7]; 

     Logger.log(actualSDay); 
    } 

} 
+0

なぜGoogleのapsスクリプトですか?組み込みのシート(配列)関数を使うだけで実現できます。 – user3616725

+0

はい、例えば、 '= text(A2;" HH:mm ")'式を使って時刻を取得することができます。 –

+0

私が正しいとすれば、それは時間表記のために純粋です、私は同意します。 私が必要とするものは、例えばA2:B8はA2を開始時刻、B8を終了時刻とする1日目です。私はG2で書かれた開始時刻とH2で終了時刻が必要です。 A列とB列の値は今回は動的にA2:B8ですが、次にA2:B10またはA2:B3になることもあります。 – Maurice

答えて

1

動作し、それをテストする必要があります。別の時間値が表示される場合は、スプレッドシートのタイムゾーンとスクリプトファイルを確認してください。

function start(){ 
     var Data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Example').getRange("A:B").getValues(); 
     var startStopArray = []; 
     for(var i=1;i<=31;i++){ 
     startStopArray.push([getStartTimeOfDay(i, Data), getEdTimeOfDay(i, Data)]) 
     } 
     SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Example').getRange("G2:H32").setValues(startStopArray); 

    } 

    function getStartTimeOfDay(day, Data){ 

     var len = Data.length; 
     for(var i=1;i<len;i++){ 
     if(Data[i][0] == "") break; 
     var dateIs = new Date(Data[i][0]); 
     if(dateIs.getDate() == day){ 
      var hrs = dateIs.getHours()%12; 
      var mins = dateIs.getMinutes(); 
      return hrs+":"+mins; 
     } 
     } 
     return ""; 
    } 

    function getEdTimeOfDay(day, Data){ 

     var len = Data.length; 
     var hhmm = ""; 
     for(var i=1;i<len;i++){ 
     if(Data[i][1] == "") break; 
     var dateIs = new Date(Data[i][1]); 
     if(dateIs.getDate() > day) break; 
     if(dateIs.getDate() == day){ 
      var hrs = dateIs.getHours()%12; 
      var mins = dateIs.getMinutes(); 
      hhmm = hrs+":"+mins; 
     } 
     } 
     return hhmm; 
    } 
+0

ありがとう!私はそれをテストし、それが動作する、それはそれが2つの数字を持つようにgetMinutesの部分を変更し、それは24hの表記であるように少し変更しました。シート上の1桁のシート計算で、ビットがオフの場合。 var hrs = dateIs.getHours()%24; var mins =(dateIs.getMinutes()<10? '0': '')+ dateIs.getMinutes(); – Maurice

関連する問題