2017-12-24 25 views
0

毎日リフレッシュするAPIからトップ30のランキングで新しい名前をチェックし、新しい名前がすべて他のカラムに追加されていない場合は、そのカラムに新しい名前を追加したいと考えています。新しい値が列に含まれているかどうかをチェックする方法は?

私はfor-loopが解決策だと思います。これは私がこれまでに得たものです。

function appendValues(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var top30Names = ss.getRange("A4:A33").getValues(); 
    var eligibleNames = ss.getRange("P4:P300").getValues(); 
    for (i = 0; i < 30; i++){ 
    var searchKey = top30Names[i]; // search if the eligible name is in the top30names 
    if (isInArray(searchKey, eligibleNames)){ 
     // do nothing 
    } 
    else{ 
     getFirstEmptyRow(); 
     ss.getActiveCell().setValue(searchKey); 
    } 
    } 
} 

function isInArray(value, array) { 
    return array.indexOf(value) > -1; 
} 

function getFirstEmptyRow() { 
    var sheet = SpreadsheetApp.getActiveSheet(), 
     values = sheet.getRange("P4:P300") // the range to search for the first blank cell 
      .getValues(), 
     row = 0; //start with the first array element in the 2D array retrieved by getValues() 
    for (row; row < values.length; row++) { 
     if (!values[row].join("")) break; 
    } 
    return sheet.setActiveSelection("P" + (row + 4)).getRow();//.getLastRow() // column between "" and row + starting_row in range 

}

これは、完全なトップ30を毎回追加し、私は新しい値のみを必要としています。

答えて

0

setFormulaを使用して回避策を見つけました。誰かがより洗練されたソリューションを持っているなら、私は幸せになるでしょう。

function appendNewName(){ 
    setFormula(); 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var newNames = ss.getRangeByName("newEntries").getValues(); 
    for (i = 0; i < 30; i++){ 
    getFirstEmptyRow(); 
    var x = newNames[i][0]; 
    // Logger.log(x); // What does this do??? 
    if (x.length > 1) { 
     ss.getActiveCell().setValue(newNames[i]); 
    } 
    } 
} 
function setFormula(){ 
    // first run this 
    clearFormula(); 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    ss.getRangeByName("newEntries").setFormula("=IF(ISNUMBER(MATCH(A4,AppendNew,0)),\"\",A4)"); // Sets a formula to the range that will show the new daily entries in top 30 
} 

function clearFormula(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    ss.getRangeByName("newEntries").clear(); 
} 

function getFirstEmptyRow() { 
    var sheet = SpreadsheetApp.getActiveSheet(), 
     values = sheet.getRange("appendNew") // the range to search for the first blank cell 
      .getValues(), 
     row = 0; //start with the first array element in the 2D array retrieved by getValues() 
    for (row; row < values.length; row++) { 
     if (!values[row].join("")) break; 
    } 
    return sheet.setActiveSelection("P" + (row + 4)).getRow(); // column between "" and row + starting_row in range 
} 
関連する問題