Google Apps Script代码无法重置指定单元格背景色,如何修改?
问题
函数运行无报错,能记录测试的白色(#ffffff)或null新单元格颜色,但无法将范围内背景色为#00ff00的单元格重置背景色,如何调整代码实现需求?
原代码
function clearCells() { // 获取工作表 var sheet = SpreadsheetApp.getActive().getSheetByName('MM Workout'); // 获取单元格区域 var range = sheet.getRange('D9:F157'); // 获取该区域内每个单元格的背景色数组 var bkg = range.getBackgrounds(); // 遍历行 for(var i=0;i<bkg.length;i++){ // 遍历单元格 for(var j=0;j<bkg[i].length;j++){ // Logger.log(bkg[i][j]) // 如果第i行第j列的单元格背景色为#00ff00 if(bkg[i][j]==='#00ff00'){ // 移除背景色 bkg[i][j] = '#ffffff'; //bkg[i][j] = null; Logger.log(bkg[i][j]) } } } }
问题原因
你只修改了内存中的背景色数组bkg,但没有将修改后的数组同步回工作表。getBackgrounds()仅负责读取单元格颜色到本地数组,修改数组不会自动影响表格内容,必须调用对应的写入方法才能生效。
修正后的代码
function clearCells() { // 获取工作表 var sheet = SpreadsheetApp.getActive().getSheetByName('MM Workout'); // 获取单元格区域 var range = sheet.getRange('D9:F157'); // 获取该区域内每个单元格的背景色数组 var bkg = range.getBackgrounds(); // 遍历行 for(var i=0;i<bkg.length;i++){ // 遍历单元格 for(var j=0;j<bkg[i].length;j++){ // 如果第i行第j列的单元格背景色为#00ff00 if(bkg[i][j]==='#00ff00'){ // 重置为白色背景 bkg[i][j] = '#ffffff'; // 若要重置为默认无填充,可替换为 bkg[i][j] = null; } } } // 关键:将修改后的背景色数组写回工作表 range.setBackgrounds(bkg); }
补充说明
- 若需要将背景色重置为表格默认的无填充状态,直接把
#ffffff替换为null即可 - SpreadsheetApp返回的颜色值为小写十六进制格式,所以
#00ff00的匹配逻辑无需调整
内容的提问来源于stack exchange,提问作者stonypaul
相关产品推荐
相关产品推荐

