2015-11-20 143 views
0

我正在嘗試在Google Spreadsheets中爲特定工作表編寫代碼,該代碼已設置爲在特定工作表上工作,可以使用數組完成此工作,還是會在此處創建問題是我有:Google電子表格中的時間戳

原始代碼:

function onEdit() { 
    // writes the current date to the last cell on the row when a cell in a specific column is edited 
    // adjust the following variables to fit your needs 
    var sheetNameToWatch = "Sheet1"; 
    var columnNumberToWatch = 20; 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var range = sheet.getActiveCell(); 

    if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch) { 
    var targetCell = sheet.getRange(range.getRow(), sheet.getLastColumn()); 
    targetCell.setValue("" + Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd")); 
    } 
} 

氏是我一直想(目前沒有工作)

function onEdit() { 
    var repArray = new Array(); 
    var allSheets = ss.getSheets(); 
    for (i in allSheets) {        
    if ((allSheets[i].getName()).match(/.*?\.$/)) 
     {repArray.push(allSheets[i].getName());} 
} 
    var sheetArray = []; 
    for (var j in repArray) { 
    var tempSheet = ss.getSheetByName(repArray[j]); 
    var sheetNameToWatch = "tempSheet"; 
    var columnNumberToWatch = 11 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var range = sheet.getActiveCell(); 

    if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch) { 
    var targetCell = sheet.getRange(range.getRow(), 1); // I choose 1 because the Date Stamp should be placed in Column A 
    targetCell.setValue("" + Utilities.formatDate(new Date(), "GMT", "dd-MM-yy")); 
    } 
} 

此電子表格是由不同的銷售代表的工作在每個有表格中有他們的名字(最後還有一段時間來構建數組),所以當有人更新列K時,我希望datestamp被放置在它們各自的表格的列A上,但目前爲止我還沒有完成它。

回答

1

是的,我認爲這是可能的。這是一些工作代碼。我不完全確定你想用正則表達式找到什麼,所以你需要改變這條線。

function onEdit() { 

    //declarations 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var allSheets = ss.getSheets(); 
    var regExp = "/.*?\.$/"; 
    var repArray = new Array(); 
    var columnNumberToWatch; 
    var sheet; 
    var range; 
    var targetCell; 

    //used my own regex for testing 
    //note sure what your expression needed to search for 
    regExp = "name" 

    //create array of sheets that match reg-exp 
    for (var i in allSheets) {        
    if ((allSheets[i].getName()).match(regExp)) { 
     repArray.push(allSheets[i].getName()); 
    } 
    } 

    //if a rep sheet was changed in a certain column then 
    //put the current date in column A in the last used row 
    columnNumberToWatch = 11; 
    sheet = ss.getActiveSheet(); 
    range = sheet.getActiveCell(); 
    // array.indexOf(string) returns the index if the string is found 
    // if the string is not found it will return a value of -1 
    if (repArray.indexOf(sheet.getName()) > -1 && range.getColumn() === columnNumberToWatch) { 
    targetCell = sheet.getRange(sheet.getLastRow(), 1); 
    targetCell.setValue(Utilities.formatDate(new Date(), "GMT", "dd-MM-yy")); 
    } 

    //the function will exit at the return statement; 
    return; 
    //old code with the for loop was left in case you want it 
    //the code was modified so it works now 

    var sheetNameToWatch; 
    //loop through sheets in rep-array 
    for (var j in repArray) { 
    sheetNameToWatch = ss.getSheetByName(repArray[j]).getName(); 
    columnNumberToWatch = 11; 
    sheet = ss.getActiveSheet(); 
    range = sheet.getActiveCell(); 
    Logger.log(sheetNameToWatch+columnNumberToWatch+sheet.getName()+range.getA1Notation()); 
    //if a rep sheet was changed in a certain column then 
    //put the current date in column A in the last used row 
    if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch) { 
     targetCell = sheet.getRange(range.getRow(), 1); 
     targetCell.setValue(Utilities.formatDate(new Date(), "GMT", "dd-MM-yy")); 
    } 
    } 
} 
+0

嘿帕特里克紐格鮑爾我試過的代碼,但它不工作...它有點不會做任何事情,並且...什麼表情正在尋找是包括期間的任何表,如果沒有時間然後再沒有必要將表添加到數組 –

+0

酷的工作原理是這是它應該做的日期應該在第一列進行更改 –

相關問題