Ian*_*ell 1 for-loop conditional-formatting google-sheets google-apps-script
这是我正在编写的脚本,以帮助我弄清楚如何编写更复杂的脚本。
在我的电子表格中,我有一列包含值列表(“testRange”、“testRangeValues”)。我还有一个下拉列表(“testCell”、“testCellValue”)。下拉列表包含一些在“testRange”列表中的值和一些不在的值。
我希望我的脚本以这样一种方式运行,当我从下拉列表中选择一个与 testRange 列表中的值匹配的值时,testRange 列表中相应值的背景颜色变为红色。
function onEdit3(e) {
var testRange = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A4:A8");
var testRangeValues = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A4:A8").getValues();
var testCell = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("C4");
var testCellValue = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("C4").getValue();
for(var i = 0;i<testRange.length;i++){
if(testCellValue==testRangeValues[i]){
testRange[i].setBackground("Red");
}
}
}
Run Code Online (Sandbox Code Playgroud)
目前没有发生颜色变化。我想我不太确定如何正确编写我的 for 循环/if 语句以达到预期的效果。有没有办法在我的电子表格中使用某种条件格式公式来做到这一点?
如果我的理解是正确的,这个答案怎么样?请将此视为几种可能的答案之一。
var sheet = SpreadsheetApp.getActiveSheet();
。这样,您可以sheet
用于检索范围。sheet.getRange("A4:A8")
并且sheet.getRange("C4")
可以使用一次。testRange.length
返回null
.当以上几点反映到你的脚本中时,它变成如下。
在此模式中,仅所选值的背景颜色更改为红色。因此,例如,选择“A”时,将“A”的背景颜色更改为红色。And when "C" is selected, the background color of "C" is changed to the red color. 在这种情况下,“A”的背景颜色被重置。
function onEdit3(e) {
var sheet = SpreadsheetApp.getActiveSheet();
var testRange = sheet.getRange("A4:A8");
var testRangeValues = testRange.getValues();
var testCell = sheet.getRange("C4");
var testCellValue = testCell.getValue();
var backgroundColors = testRangeValues.map(function([a]) {return [a == testCellValue ? "Red" : ""]});
testRange.setBackgrounds(backgroundColors);
}
Run Code Online (Sandbox Code Playgroud)
在此模式中,所选值的背景颜色被保存。因此,例如,选择“A”时,将“A”的背景颜色更改为红色。And when "C" is selected, the background color of "C" is changed to the red color. 在这种情况下,“A”的背景颜色保持红色。
function onEdit3(e) {
var sheet = SpreadsheetApp.getActiveSheet();
var testRange = sheet.getRange("A4:A8");
var testRangeValues = testRange.getValues();
var testCell = sheet.getRange("C4");
var testCellValue = testCell.getValue();
for (var i = 0; i < testRangeValues.length; i++) {
if (testRangeValues[i] == testCellValue) {
sheet.getRange("A" + (4 + i)).setBackground("Red");
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用现代 javascript 语法。为此,您需要启用 V8 运行时。在这之后你可以
/**
*
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
const onEdit = e => {
const sheet = e.range.getSheet();
const value = e.range.getValue();
if (sheet.getName() == 'Sheet1' && e.range.getA1Notation() === 'C2') {
const range = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1);
range.setBackgrounds(
range.getValues().map(row => [row[0] === value ? 'red' : ''])
);
}
};
Run Code Online (Sandbox Code Playgroud)
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。