Javascript 试图在Google应用程序脚本中基于关键字设置BackgroundColor
我正试图根据相关关键字突出显示表中的一行。然而,我试图设置我的单元格区域的背景色,却没有得到任何颜色。我在if/else语句中使用了记录器,它们都工作正常,所以我认为我在某种程度上做错了Javascript 试图在Google应用程序脚本中基于关键字设置BackgroundColor,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正试图根据相关关键字突出显示表中的一行。然而,我试图设置我的单元格区域的背景色,却没有得到任何颜色。我在if/else语句中使用了记录器,它们都工作正常,所以我认为我在某种程度上做错了setBackgroundColor function statusHighlighter(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheetName = ss.getActiveSheet(); var sheetValue
setBackgroundColor
function statusHighlighter(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = ss.getActiveSheet();
var sheetValues = ss.getDataRange().getValues();
sheetValues.forEach(function(row, index) {
var acctStatus = row[7];
var highlightRange = sheetName.getRange(index+1, 1, 1, sheetName.getLastColumn());
if(acctStatus === "Kept"){
highlightRange.setBackgroundColor('##fffec4');
Logger.log(acctStatus + " " + index);
} else if(acctStatus === "Suspended"){
highlightRange.setBackground('##cf4a4a');
} else if(acctStatus === "Deleted"){
highlightRange.setBackground('##6c75ad');
}
});
}
解释/问题:
您的代码中有一个问题,我想建议您进行一些优化
- 十六进制颜色代码只能包含一个,但您使用的是两个
- 您可以使用迭代,但您可以在
循环中创建一个带有颜色的数组,然后使用来一次性设置颜色。看看为什么forEach
- 我使用以下表达式:
创建一个包含Array(lastCol).fill(“#6c75ad”)
元素数()的数组,并使用相同的值,因为目标是使用相同的颜色值为整行着色lastCol
acctStatusVals
只考虑列8
。我之所以选择8
,是因为在代码中使用了7
的数组索引,这相当于列8
。小心点。在我的代码中,8
表示列H
。根据你的需要调整这个。要将2D数组转换为1D,因为我们使用的是单个列,您可以使用
ss.getSheetByName('Sheet1')代码>但我将其保留为注释,因为此步骤是可选的
function statusHighlighter(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheetName = ss.getActiveSheet();
// const sheetName = ss.getSheetByName('Sheet1'); // change to the name of your sheet
const lastRow = sheetName.getLastRow();
const lastCol = sheetName.getLastColumn();
const acctStatusVals = sheetName.getRange(1,8,lastRow).getValues().flat();
const colors = [];
acctStatusVals.forEach(acctStatus=>{
if(acctStatus === "Kept"){
colors.push(Array(lastCol).fill('#fffec4'));
} else if(acctStatus === "Suspended"){
colors.push(Array(lastCol).fill('#cf4a4a'));
} else if(acctStatus === "Deleted"){
colors.push(Array(lastCol).fill('#6c75ad'));
}
});
sheetName.getRange(1, 1, lastRow, lastCol).setBackgrounds(colors);
}
用于上述脚本的工作表:
感谢您的回答,看到编码的最佳实践非常有帮助。我所做的唯一更改是将lastRow调整为sheetName.getLastRow()-1,并轻推sheetName.getRange(2,1,lastRow,lastCol)以调整标题行。再次感谢您的帮助!