比较同一文档中两个Google工作表中的值

时间:2016-03-14 16:49:36

标签: google-sheets gs-conditional-formatting

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

第1页

BinaryFormatter

第2页

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

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

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

2 个答案:

答案 0 :(得分:2)

条件格式

条件格式可以这样做,但它只能引用同一工作表中的单元格。要解决此限制,请放置

等命令
=arrayformula(Sheet1!B2:H2)

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

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

Apps脚本

避免重复数据的另一种方法是使用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]);
}

答案 1 :(得分:2)

概述

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

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

解释

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

以上公式包括两个&#34; hacks&#34;。第一个是在概述中提到的,使用了INDIRECT。第二个&#34; hacks&#34;是使用R1C1符号与ROW()和COLUMN()一起使条件格式规则与使用硬编码引用相比非常灵活,并且表现得像&#34; normal&#34;参考

Conditional formatting rule