1

我想,

如果 Sheet1 ColumnB = Sheet89 ColumnA

然后匹配的 Sheet1 B 列单元格将变为绿色 这是我的演示表

根据一些指导方针,我做了这个但没有工作。

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var columnB = sheet.getRange(1, 2, sheet.getLastRow()-1, 1);
  var bValues = columnB.getValues();
  var sheet89 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet89');
  var columnO = sheet89.getRange(1, 1, sheet.getLastRow()-1, 1);
  var oValues = columnO.getValues();

        for (var h = 0; h < bValues.length; h++) {
           for (var i = 0; i < oValues.length; i++) {
              if (oValues[i][0] == bValues[h][0]) {
                 sheet.getRange(i + 2, 1, 1, 1).setBackgroundColor('green');
              }
           }
        }
}
4

2 回答 2

0

下面的这个解决方案将使用 sheet1 的 B 列中的值遍历每个单元格,并根据 sheet89 的 A 列中的每个值检查它(尽管您将此 ColumnO 命名为,根据您的 getValues 函数,它将从 A 列获取值)。

如果找到匹配项,它会将 sheet1 的 B 列中的单元格变为绿色。在您的示例代码中,您使用 i 循环变量(它遍历 sheet89 上的行)使 sheet1 上的单元格变为绿色。目前尚不清楚您想要将哪些单元格变为绿色。我以为是 sheet1 上的单元格,所以我将代码更改为

sheet.getRange(h+1, 2).setBackgroundColor('green');

此外,单个单元格的 getRange 函数只需要 2 个参数,因此我删除了将单元格着色为绿色的行的 numRows 和 numColumns 参数。

我不确定为什么 bValues 和 oValues 会排除最后一行,但我删除了每一个中的 -1,因为如果出于任何原因在空白工作表上运行它会导致代码失败。getLastRow() 返回带有值的最后一行,而不是工作表中的下一个空白行。如果要捕获整个工作表,则不应使用 -1。

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');

  var columnB = sheet.getRange(1, 2, sheet.getLastRow(), 1);
  var bValues = columnB.getValues();

  var sheet89 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet89');
  var columnO = sheet89.getRange(1, 1, sheet.getLastRow(), 1);
  var oValues = columnO.getValues();

  for (var h = 0; h < bValues.length; h++) {
     for (var i = 0; i < oValues.length; i++) {

       if (oValues[i][0] == bValues[h][0]) {
         sheet.getRange(h + 1, 2).setBackgroundColor('green');
       }  
     }
  }
}
于 2014-03-22T06:05:09.157 回答
0

我所理解的需要(而不是目前示例表显示的内容)可以使用条件格式。

在 Google 电子表格中,由于安全性和授权原因,跨工作表的条件格式设置并不像在单个工作表中那样简单。例如,为了速度,您可能更喜欢将 的内容复制Sheet89Sheet1(仅两个单元格)以避免该问题,或者实际上改为编写脚本。至少保持范围尽可能小。

然而,这是可能的,虽然可能很慢并且需要授权。

请从那时起清除任何条件格式Sheet1 ColumnA

选择 ColumnA in Sheet1, Format, Conditional formatting..., Format cells if...Custom formula is

=countif(IMPORTRANGE(" k e y ","Sheet89!A:A"),A1)<>0

突出显示您的选择和Done

k e y上面表示Sheet89(看起来像1u4vq8vDne-aKMVdJQPREGOxx7n99FqIb_kuJ_bG-PzM)的唯一识别码。

图像目前显示图像的 ColumnC 中的内容(但在示例的 ColumnA 中),图像中的 F1 和 F2 显示Sheet89示例的 ColumnA 中的内容。使用条件格式应用了较浅的棕色:

SO20889520 示例

于 2017-05-26T20:00:37.020 回答