首页 > 解决方案 > 应用脚本条件格式按名称应用于工作表

问题描述

我一直在尝试制作一个谷歌应用脚​​本代码,如果它有特定的文本,比如“L”,它会突出显示单元格。

我制作了下面的代码,但它不起作用,当我运行它时没有出现错误。我不知道是什么问题。

你能看看它,请说明它为什么不起作用。

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Dec');
  var range = sheet.getRange("C:AG");
  if (range == 'L') {
        ss.range.setBackgroundColor('#ea9999');
  } 
}

标签: google-apps-scriptgoogle-sheets

解决方案


代码问题:

需要提三件事:

  • range范围对象,而不是字符串。在这种if情况下,您将 typerange的对象与type 的对象进行比较string。您需要使用getValue来获取range对象的值,然后将其与 string 进行比较L

  • 这段代码需要很长时间才能完成,因为您要检查的单元格范围很大,而且您正在迭代地使用GASAPI 方法。正如最佳实践中所解释的,使用getValuesgetBackgroundssetBackgrounds等批处理操作效率更高。

  • 您可以进行的另一项改进是使用getLastRow来限制范围的行限制,因为您正在寻找非空值。没有理由在最后一行内容之后检查空单元格。

Google Apps 脚本解决方案:

function formatting() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Dec');
  const range = sheet.getRange("C1:AG"+sheet.getLastRow());
  const values = range.getValues();
  const bcolors = range.getBackgrounds();
  const new_bcolors = values.map((r,i)=>r.map((c,j)=>c=='L'?'#ea9999':bcolors[i][j]))
  range.setBackgrounds(new_bcolors)
 }

谷歌表格解决方案:

另一个想法是在 Google 表格中创建一个条件格式:

在此处输入图像描述

并使用您的十六进制代码指定自定义颜色:

在此处输入图像描述

JavaScript 参考:


推荐阅读