首页 > 解决方案 > Google表格:有条件地将一列单元格格式化为相邻的单元格(列)

问题描述

我对编码很陌生,并没有真正尝试过任何东西。我确实看到这可以通过宏外部的条件格式来实现,但它似乎只适用于当前的电子表格,我没有注意到一种方法可以为每张工作表中的所有适用单元格快速执行此操作。

我有一个用于预算的电子表格。B 列标记为小计,这是 D 列(实际花费)应该达到但不超过的金额。我希望 D 列中的单元格成为默认颜色,直到它达到 B 列中相邻单元格的数量。如果数量超过相邻 B 列单元格中的数字,那么我希望它是红色的。

这应该适用于工作簿中的每个工作表,我希望它自动执行此操作,而不提示打开工作簿以外的任何内容。

此外,当我完成该支付期的预算时,如果我超出预算,我将选项卡的颜色更改为红色,如果我在预算范围内,则选项卡为黑色。

编码是我一直想学习的东西,我认为这是一个很好的起点。

以下链接是预算示例。“手机”太高了”,“Gas/Fuel”是正确的,“Grocery”是在下面。

https://docs.google.com/spreadsheets/d/17lUuwdjfPz17_gkckofgW8pnqGMvBlqeyN8d8xq2HxY/edit?usp=sharing

编辑:我想出了条件格式。

**Red:** Custom formula is =D3>1*B3 for range D3:D72
**Empty:** Cell is empty for range D3:D72
**Green:** Custom formula is =D3=B3 for range D3:D72

我的下一个问题是如何使它适用于所有工作表,而不仅仅是当前工作表?

标签: google-apps-scriptgoogle-sheets

解决方案


我在应用我想要的条件格式的同时记录了一个宏。它出来的时候又长又笨重,但我已经把它简化为下面的脚本,它可以快速有效地完成我想要它做的事情。将其应用于工作簿中的所有电子表格会很酷,但键盘快捷键很容易使用。在我使用手机上的每个电子表格之前,我只想这样做。

function ZeroBalance1() {
  var spreadsheet = SpreadsheetApp.getActive();
   var conditionalFormatRules = 
spreadsheet.getActiveSheet().getConditionalFormatRules();

  conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1, 
SpreadsheetApp.newConditionalFormatRule()
  .setRanges([spreadsheet.getRange('D3:D72')])
  .whenFormulaSatisfied('=D3>1*B3')
  .setBackground('#FF0000')
  .build());

  conditionalFormatRules.push(SpreadsheetApp.newConditionalFormatRule()
  .setRanges([spreadsheet.getRange('D3:D72')])
  .whenCellEmpty()
   .build());

  conditionalFormatRules.push(SpreadsheetApp.newConditionalFormatRule()
  .setRanges([spreadsheet.getRange('D3:D72')])
    .whenFormulaSatisfied('=D3=B3')
  .setBackground('#00FF00')
   .build());

  spreadsheet.getActiveSheet().setConditionalFormatRules(conditionalFormatRules);
};

推荐阅读