1

我有一个包含两个工作表的 Google 电子表格。每张表包含一列 URL,后跟 6 列数据。如果值不同,我想在第二张纸上突出显示,理想情况下,根据值将特定单元格设置为红色或绿色背景。

表 1

╔═════════════╦═════╦════╦═════╦════╦════╦════╗
║     URL     ║  d1 ║ d2 ║ d3  ║ d4 ║ d5 ║ d6 ║
╠═════════════╬═════╬════╬═════╬════╬════╬════╣
║ example.com ║ 400 ║ 11 ║ 2.2 ║ 50 ║ 60 ║ 70 ║
╚═════════════╩═════╩════╩═════╩════╩════╩════╝

表 2

╔═════════════╦═════╦════╦═════╦════╦════╦════╗
║     URL     ║  d1 ║ d2 ║ d3  ║ d4 ║ d5 ║ d6 ║
╠═════════════╬═════╬════╬═════╬════╬════╬════╣
║ example.com ║ 400 ║ 11 ║ 2.2 ║ 55 ║ 68 ║ 90 ║
╚═════════════╩═════╩════╩═════╩════╩════╩════╝

在这种情况下,我希望突出显示 55、68 和 90 值,因为它们与工作表 1 不同。

我的快速解决方案是将每个工作表导出为 CSV,然后在它们上运行差异以突出显示更改,但这并不能完全实现我想要的。

4

2 回答 2

2

条件格式

条件格式可以做到这一点,但它只能引用同一工作表中的单元格。要绕过此限制,请放置以下命令,例如

=arrayformula(Sheet1!B2:H2)

在第二张纸上的某处(例如,在单元格 AB2 中)。然后使用规则“值不等于 ... =AB2”对范围 B2:H2 使用条件格式。

(输入条件格式公式,因为它应该在被格式化范围的左上角读取)。

应用脚本

另一种避免数据重复的方法是使用 Apps 脚本。这是根据您描述的情况设置背景的示例代码。请注意,除非设置为在每次编辑时触发,否则它不会自动更新。

上述带有条件格式的方法是首选。

function compare() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName('Sheet1');
  var sheet2 = ss.getSheetByName('Sheet2');
  var values1 = sheet1.getRange('B2:H2').getValues()[0];
  var values2 = sheet2.getRange('B2:H2').getValues()[0];
  var backgrounds = []; 
  for (var k = 0; k < values1.length; k++) {
    backgrounds.push(values1[k] == values2[k] ? 'white' : 'red');
  }
  sheet2.getRange('B2:H2').setBackgrounds([backgrounds]);
}
于 2016-03-15T00:06:18.597 回答
2

概述

在条件格式规则的自定义公式中使用 INDIRECT,如下所示:

=INDIRECT("Sheet1!R"&ROW()&"C"&COLUMN(),false)<>B2

解释

Google 表格的内置条件格式功能不允许直接使用对不同工作表的引用,但它允许使用 INDIRECT。

上面的公式包括两个“黑客”。第一个在概述中提到,使用 INDIRECT。第二个“技巧”是将 R1C1 表示法与 ROW() 和 COLUMN() 一起使用,以使条件格式规则与使用硬编码引用相比非常灵活,并且表现得像“正常”引用。

条件格式规则

于 2016-03-15T03:17:17.613 回答