2017-07-18 13 views
1

私は、日のリスト(1年の学校のカレンダー)を調べ、ユーザーのプロンプトからの日付と比較し、日付(すべての日セルに対応するB列内の他の値が存在しないだけ場合、この場合は、文字列(「夏休み」B列に設定された)ユーザー日より「下」スプレッドシートと配列の間の日付操作

私が持っているもの:。this is the table as seen before action

入力で9月12日を設定した場合:enter image description here

function setTrimesters() { 
    var sheet = 
SpreadsheetApp.getActive().getSheetByName("calendar2017"); 

    // Start of 1st trimester 
    var input = ui.prompt("Set first day of trimester (DD/MM)"); 
    var value = input.getResponseText(); 

    var allStartEndTrimesters = [valorInici1rTri] 

    // Get dataRange 
    var dataRange = sheet.getRange('A1:B'+sheet.getLastRow()); 

    // Get dataRange values 
    var data = dataRange.getDisplayValues(); 

    for (var i = 0 ; i < data.length ; i++) {  
    if (data[i][0] < value) { 
     if (data[i][1] == '') { 
     data[i][1] = "Summer holidays"; 
     } 
    } 
    } 
    dataRange.setValues(data);  
} 

スクリプトは動作していますの日付の値を持つです。そして、10月1日から11日にかけて、スクリプトは "Summer holidays"という値を割り当てます。

比較の前に、の月の値を取得する方法がわかりません。私はsetNumberFormatをmilisecondsまたは日(42895程度に似ています)にしようとしました...しかし、SpreadsheetAppとApp Scriptsにはいくつかの制限があります。

答えて

2

問題を支援するため、事前に

おかげで、あなたが文字列として日付で動作するので、彼らは辞書順で比較してしまうことがあります。 1日目が始まると、4/9が5/7に先行します。これはあなたが望むものではありません。私にお勧めします

  • getDisplayValuesの代わりにgetValuesを使用してください。文字列の代わりにJavaScriptの日付オブジェクトを取得します。次に、比較<が正しく動作しますが、開始日をDateオブジェクトにする必要があります。下記を参照してください。
  • 入力データを列Aに上書きしないでください。入力範囲と出力範囲が分かれています。ここで

削除するユーザインタフェース部分と、例である:正しく、私は後でへの答えを投稿します働いているならば助けるため

function testSummer() { 
    var sheet = SpreadsheetApp.getActiveSheet();  
    var userEnteredDate = "26/07"; // what you get from user 
    var dateParts = userEnteredDate.split("/"); 
    var beginning = new Date(); 
    beginning.setMonth(dateParts[1] - 1, dateParts[0]); 
    beginning.setHours(0, 0, 0, 0); // so it's 0 hour of the day entered, in the current year 

    var inputData = sheet.getRange('A1:A'+sheet.getLastRow()).getValues(); 
    var outputRange = sheet.getRange('B1:B'+sheet.getLastRow()); 
    var outputData = outputRange.getValues(); 

    for (var i = 0; i < inputData.length; i++) { 
    if (inputData[i][0] < beginning && outputData[i][0] == "") { 
     outputData[i][0] = "summer vacation"; 
    } 
    } 
    outputRange.setValues(outputData); // not overwriting input 
} 
+0

おかげで、私は、私の構造では、あなたのソリューションを統合していますシェア。再度、感謝します! – estemon