对整个 Google Sheet 工作簿使用条件格式来搜索重复项

Use Conditional formatting for whole Google Sheet Workbook to search for duplicates

对整个 Google Sheet 工作簿使用条件格式 目前,我在查看该列的每个作品sheet中对两列使用单色条件格式,如果与该列中的单个作品sheet有相似的匹配,它将突出显示该列黄色.

应用于范围: C1:C1000

格式规则 格式化单元格如果... =if(C1<>"",Countif(C:C,left(C1,18)& "*") > 1)

格式样式 我选择了黄色

我对 D 列做完全相同的事情

现在我有超过 10 个工作sheets,而且它每周都在增长我发现 sheets 之间发生了重复,因为条件格式只适用于每个 sheet.

我有没有办法让 Google Sheet 通过查看 C 列和 D 列有条件地格式化整个工作簿,如果有匹配项,它会以黄色突出显示.

如果有人可以实际为我编写脚本或宏(因为我不知道该怎么做),我将不胜感激。或者,如果有人知道一种简单的方法来完成我需要完成的工作,我将不胜感激。

作为示例,这里有一个工作簿可以向您展示我的意思。 在 google 工作簿中,在 Sheet 标有“Visual Test Current”的标签中,这是我目前能够按照描述进行设置的内容。它完美运行。

在标有“Visual Test Sheet 1”的 sheet 中,它在个人 sheet 本身上运行良好,但它不会查看“Visual Test Current”,如果有是基于公式 "=if(D1<>"",Countif(D:D,left(D1,18)& "") > 1)" 的匹配 和 =if(E1<>"",Countif(E:E,left(E1,18)& "") > 1)

它没有格式化单元格来告诉我之前的 sheet 中存在重复匹配项。这就是我想弄清楚该怎么做。

我如何 get/create 一个公式,通过 Google 工作簿中的每个 sheet 查看这两列,如果有基于 Countif 参数的匹配,它会格式化单元格变为黄色,向我突出显示 Google 工作簿中的 sheet 某处有该单元格的副本。

这是共享测试文档的 link,可帮助您了解我正在尝试做的事情。

https://docs.google.com/spreadsheets/d/e/2PACX-1vQryGa9Z325XMv1mU5hq0AhaO3uWbzZ7MSxfY7U4EcPS7hGg281wogKJE98IQjriR4cPIXTCatd-Y8d/pubhtml

解决方案:

代码示例:

const EXCLUDED_SHEETS = ["Sheets that won't be updated"];

function updateAllSheets() {
  const ss = SpreadsheetApp.getActive();
  const sheets = ss.getSheets().filter(sheet => !EXCLUDED_SHEETS.includes(sheet.getName()));
  sheets.forEach(sheet => {
    const cRange = sheet.getRange("C1:C" + sheet.getLastRow());
    const cRule = SpreadsheetApp.newConditionalFormatRule()
    .whenFormulaSatisfied("=if(C1<>\"\",Countif(C:C,left(C1,18)& \"*\") > 1)")
    .setBackground("yellow")
    .setRanges([cRange])
    .build();
    const dRange = sheet.getRange("D1:D" + sheet.getLastRow());
    const dRule = SpreadsheetApp.newConditionalFormatRule()
    .whenFormulaSatisfied("=if(D1<>\"\",Countif(D:D,left(D1,18)& \"*\") > 1)")
    .setBackground("yellow")
    .setRanges([dRange])
    .build();
    sheet.setConditionalFormatRules([cRule,dRule]);
  });
}

自动执行:

如果你想自动执行这个,你应该使用触发器。在这里,我看到两个主要选项:

  1. onEdit触发。使用此触发器,您的函数将在每次用户编辑传播sheet 时执行。要使用此触发器,只需将函数 updateAllSheets 重命名为 onEdit.
  2. Time-driven trigger. This kind of trigger would execute periodically (for example, every hour). In contrast with onEdit, to use this trigger you have to install it first. To install this, either follow these steps or execute a function like this once (the example below refers to a trigger that executes hourly, check this 查看您可以使用的所有备选方案):
function createTimeDrivenTrigger() {
  // Trigger every 1 hour.
  ScriptApp.newTrigger('updateAllSheets')
      .timeBased()
      .everyHours(1)
      .create();