我希望在單元格值在特定范圍內“測驗”的任何地方添加一個驗證下拉串列。
我以為我很接近,但我認為我遇到了陣列問題,我相信。
真的在努力解決這個問題,希望這是有人可能會看到的一個小調整:
function setValueToEmptyCell(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('Sheet1');
const valuesFlat = sheet.getRange('a1:c10').getValues().flat();
//Empty array to store the output values;
const output = [];
valuesFlat.forEach(row => {
if(row == 'test'){
(SpreadsheetApp.newDataValidation()
.setAllowInvalid(true)
.requireValueInRange(sheet.getRange('$H1:H3'), true)
.build());
} else {
output.push([row])
}
})
//Because we have stored the original value we overwrite the whole range with the 'new' values
sheet.getRange('a1:c10').setValues(output);
}
這是我看到的錯誤:
上午 1:54:51 通知執行開始
上午 1:54:52 錯誤例外:資料中的行數與范圍內的行數不匹配。資料有 7,但范圍有 10。
uj5u.com熱心網友回復:
我相信你的目標如下。
- 對于單元格“A1:C10”,當單元格值為 時
test,您要放置一個下拉串列SpreadsheetApp.newDataValidation().setAllowInvalid(true).requireValueInRange(sheet.getRange('$H1:H3'), true).build()。
修改點:
- 在您的腳本中,行和列不能被
flat()of決議const valuesFlat = sheet.getRange('a1:c10').getValues().flat();。 (SpreadsheetApp.newDataValidation().setAllowInvalid(true).requireValueInRange(sheet.getRange('$H1:H3'), true).build())未使用。- 為了放置下拉串列,
setDataValidations(rules)使用。
當這些點反映在你的腳本中時,下面的修改怎么樣?
修改后的腳本:
function setValueToEmptyCell() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('Sheet1');
const range = sheet.getRange('a1:c10');
const valuesFlat = range.getValues();
const output = [];
valuesFlat.forEach(row => {
const temp = [];
row.forEach(col => {
if (col == 'test') {
temp.push(SpreadsheetApp.newDataValidation()
.setAllowInvalid(true)
.requireValueInRange(sheet.getRange('$H1:H3'), true)
.build());
} else {
temp.push(null);
}
});
output.push(temp);
});
range.setDataValidations(output);
// range.createTextFinder("test").matchEntireCell(true).replaceAllWith("");
}
運行此腳本時,當“A1:C10”的單元格值為 時
test,將放置一個下拉串列SpreadsheetApp.newDataValidation().setAllowInvalid(true).requireValueInRange(sheet.getRange('$H1:H3'), true).build()。如果要
test在放置下拉串列后從單元格值中洗掉,請使用range.createTextFinder("test").matchEntireCell(true).replaceAllWith("");.
參考:
- 設定資料驗證(規則)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/512545.html
上一篇:如何從For回圈中獲取回傳值并將其傳遞給.body(StringBody(session=>在Gatling中使用Scala
