我在 Google 作業表中有兩列,A 列和 B 列。
如果我們想在 B 列中添加資料驗證,A 列包含一個“X”。如果我們不希望 B 列中的資料驗證,A 列是空白的。
我創建了以下腳本,該腳本可以運行,但運行 500 行大約需要 2 分鐘。有沒有辦法更有效地撰寫腳本以更快地運行,或者這是最好的解決方案?
function AddDataValidation(){
var ss4 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet4');
for(row=2; row<=500; row ){
if (ss4.getRange('A' row).getValue() == 'X'){
ss4.getRange('B' row).setDataValidation(SpreadsheetApp.newDataValidation()
.requireValueInList(['a', 'b', 'c'], true)
.build())
}
}
}
uj5u.com熱心網友回復:
描述:
要優化電子表格腳本,請始終使用 Range.getValues()/setValues()。所以我得到所有的值而不是單獨的。這適用于所有其他類別,因此對于您的示例,請使用 Range.getDataValidations() 和 Range.setDataValidations()。請注意,我已將規則包裝在陣列括號中。這是因為規則需要是二維陣列才能在電子表格中設定。請讓我知道性能差異。
腳本
function AddDataValidation() {
var ss4 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet4');
var data = ss4.getDataRange().getValues();
var row = 0;
var rule = SpreadsheetApp.newDataValidation().requireValueInList(['a', 'b', 'c']).build();
var rules = [];
// data start in row 1 index 0 so skip header
for( row=1; row<data.length; row ) {
if( data[row][0] === 'X' ) {
rules.push([rule]);
}
else {
rules.push([null]);
}
}
// assuming header in row 1 start in row 2
ss4.getRange(2,2,rules.length,1).setDataValidations(rules);
}
參考
- https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#newDataValidation()
- https://developers.google.com/apps-script/reference/spreadsheet/range#setDataValidations(DataValidation)
uj5u.com熱心網友回復:
添加資料驗證
您可能需要先清除資料驗證
function AddDataValidation(){
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet0');
const vs = sh.getRange(2,1,sh.getLastRow() - 1,2).getDisplayValues();
const rule = SpreadsheetApp.newDataValidation().requireValueInList(['a', 'b', 'c'], true).build();
let vo = vs.map((r,i) => {
if(r[0] == "X") {
return [rule];
} else {
return [null];
}
})
sh.getRange(2,2,vo.length,1).clearDataValidations().clearContent();
sh.getRange(2,2,vo.length,1).setDataValidations(vo);
}
我清除了 dataValidations 和 content 因為錯誤的內容可能導致驗證出現問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/434971.html
