2012-11-12 152 views
1

我想阻止對Google電子表格中K列的更改。不管有什麼價值,我都不希望它改變。我不喜歡保護功能,因爲它使我認爲是一個醜陋的顯示。阻止對Google電子表格中單元格的更改

我的代碼。不幸的是,它完全沒有。意圖是取出單元中的任何當前值,保存它,然後將它寫回單元格的出口,而不是保存可能對單元格所做的任何更改。該單元格將會空白開始,或者已經被修改爲包含日期&時間。無論當前內容是否空白,在離開單元格後都應保持相同的值。

function onEdit() { 
    var s = SpreadsheetApp.getActiveSheet(); 
    var r = s.getActiveCell(); 
    var columnNum=r.getColumn() 


    // if column is K then prevent any changes 
    if (columnNum == 11) { 
    var dateCell = s.getRange(r.getRow(), 11); 
    var v=dateCell.getValue(); 
    dateCell.setValue(v); 
    } 
}; 

回答

1

這可能對你有幫助。解決您的問題,直到Google有適當的腳本API來保護範圍。這是使用驗證功能,它的工作原理。

function setRangeProtection(rangeToProtect) { 

    var firstRow = rangeToProtect.getRow(); 
    var noOfRows = rangeToProtect.getHeight(); 
    var firstColumn = rangeToProtect.getColumn(); 
    var noOfColumns = rangeToProtect.getWidth(); 

    var rangeToProtectValues = rangeToProtect.getValues(); 
    var rangeToProtectFormulas = rangeToProtect.getFormulas(); 

    var cellRow = firstRow; 

    for (var i=0 ; i<noOfRows ; ++i) { 

    var cellColumn = firstColumn; 

    for (var j=0 ; j<noOfColumns ; ++j) {   

     var cell = sheet.getRange(cellRow, cellColumn); 

     if (rangeToProtectFormulas[i][j] == "") { 
     var rangeToProtectContent = rangeToProtectValues[i][j]; 
     } else { 
     var rangeToProtectContent = rangeToProtectFormulas[i][j]; 
     } 

     var rules = SpreadsheetApp.newDataValidation() 
        .requireTextEqualTo(rangeToProtectContent) 
        .setAllowInvalid(false) 
        .setHelpText('Don\'t mess with the DJ!') 
        .build(); 
     cell.setDataValidation(rules); 

     ++cellColumn; 

    } 

    ++cellRow; 

    } 

} 

這個唯一的小問題是,與包含公式的單元格的紅色小三角形出現,當你在它懸停顯示一條消息。無法擺脫那一個。如果你找到一個解決方案讓我知道。刪除幫助文本並不能解決問題,因爲它會返回到默認模式。

+0

不錯!這是一個使用DataValidation的優秀解決方法。 – Fred

相關問題