2013-04-12 39 views
0

我試圖更改此腳本以搜索日期(現在)並在工作表中爲找到的日期着色。在工作表中找到日期併爲其添加顏色

原稿;

function findThis(val) { 
var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); 
var searchStr = "Foo"; 
Logger.log(res); 
var res = findValue(data, searchStr); 
if (res != null) { 
Browser.msgBox("Found in row " + res[0] + ", column " + res[1]); 
} 
} 

function findValue(data, obj) { 
for (var i = 0; i < data.length; i++) { 
for (var j = 0; j < data[i].length; j++) { 
    if (data[i][j] == obj) { 
    return [i, j]; 
    } 
} 
} 
return null; 

}

我的試驗和錯誤的腳本;我想嘗試getA1Notation() 我做錯了,但stil學習和嘗試,也許你可以幫助。

function findThis(val) { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // toevoeging 
    var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); 
    var Today = new Date(); 
    var date = Utilities.formatDate(Today,"GMT+100","dd-M-yyyy"); 
    Logger.log(date) 
    var searchStr = date; 

    var res = findValue (data, searchStr); 
    if (res != null) { 
    Logger.log(res); 
    Logger.log(res[0]+", "+res[1]); 
    var Range = (res[0]+", "+res[1]); 
    var x = (res[0]+", "+res[1]); 
    //var C = range.getColumnIndex(res); 
    var range = Range.getA1Notation() 
    Logger.log(range); 
    var value = sheet.getRange([x]).getValue(); //toegevoegd 
    Logger.log(value); 
    Logger.log(x);  
    sheet.getRange(x).setBackgroundColor('Yellow'); 
    Browser.msgBox("Found in row " + res[0] + ", column " + res[1]); 
    } 
} 

function findValue(data, obj) { 
    for (var i = 0; i < data.length; i++) { 
    for (var j = 0; j < data[i].length; j++) { 
     if (data[i][j] == obj) { 
     return [(i+1), (j+1)]; 
     } 
    } 
    } 
+0

電子表格中的日期是真實日期嗎?這意味着你可以從菜單中更改他們的表示形式如果是這種情況,那麼find函數永遠不會返回任何東西,因爲日期是具有小時,分鐘,秒和甚至毫秒的「完整」日期對象!除此之外,您嘗試定義範圍的方式無效......但我會在發佈答案之前等待您的答案。 –

+0

不,日期格式爲dd-M-yyyy。上面的腳本找到了日期的正確位置。但de位置格式爲行5.0列16.0,我必須改變它。 – Lightingben

回答

0

看起來你在理解JavaScript對象及其方法時犯了一些簡單的錯誤。 (谷歌應用程序腳本GAS是JavaScript的衍生產品,所以任何可以幫助您學習基本JavaScript的資源都會提高您的技能。)

Range是Class Range的對象,而a1Notation表達式電子表格中的範圍(例如「A1」或「A:Z」)是Class String的對象。現在,一個String有一些屬性和方法可用於處理您想要對一串文本執行的操作。另一方面,Range對象具有不同的屬性和適合它的方法 - 它們被記錄爲here。要讓他們在腳本中處理變量對象,該變量必須是Class Range。讓我們來看看這行代碼:

var Range = (res[0]+", "+res[1]); 

該行創建了一個名爲範圍的變量,它是一個包含類似"15, 16"一個字符串。然後,當您嘗試Range.getA1Notation()時,它會失敗,因爲字符串沒有該方法。你需要做的是使用一個實際的Range對象。這裏有一種方法會爲你工作,只需更換相應的塊在當前的腳本:

if (res !== null) { 
    var range = sheet.getRange(res[0],res[1]); 
    range.setBackgroundColor('Yellow'); 
    Browser.msgBox("Found at " + range.getA1Notation()); 
} 

你不需要變量value在你的榜樣任何東西,但如果你這樣做,這是你會怎樣獲得它。

var value = range.getValue(); //toegevoegd 
    Logger.log(value); 

像@Sergeinsas,我對你比較日期的方式有一些擔憂。但是,如果它爲你工作,那太棒了。

+0

非常感謝Mogsdad。我嘗試了一切,但沒有看到。現在當我讀到你的解釋時,它很簡單。 – Lightingben

相關問題