Javascript 如何制作[条件格式]脚本?

Javascript 如何制作[条件格式]脚本?,javascript,google-apps-script,google-sheets,gs-conditional-formatting,Javascript,Google Apps Script,Google Sheets,Gs Conditional Formatting,我要 如果Sheet1 ColumnB=Sheet89 ColumnA 然后匹配的Sheet1列B单元格将为绿色 这是我的名片 根据一些指导原则,我做了这个,但不起作用 function formatting() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); var columnB = sheet.getRange(1, 2, sheet.getLastRow()-1, 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');
              }
           }
        }
}
函数格式化(){
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();
对于(var h=0;h
下面的解决方案将使用sheet1的B列中的值遍历每个单元格,并对照sheet89的a列中的每个值进行检查(尽管您将此列命名为O,但根据getValues函数,它将从a列中获取值)

如果找到匹配项,它将在表1的B列中的单元格变为绿色。在示例代码中,使用i循环变量(在sheet89上的行中迭代)使sheet1上的单元格变为绿色。现在还不清楚你想把哪些细胞变成绿色。我以为是表1上的单元格,所以我将代码改为

sheet.getRange(h+1, 2).setBackgroundColor('green');
此外,单个单元格的getRange函数只需要2个参数,因此我删除了将单元格变为绿色的行的numRows和numColumns参数

我不知道为什么bValue和ovalue会排除最后一行,但我删除了其中的-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');
       }  
     }
  }
}
函数格式化(){
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();
对于(var h=0;h
我所理解的所需内容(而不是当前示例工作表所示内容)可以通过条件格式实现

在Google电子表格中,由于安全性和授权,跨表格的条件格式设置远不如单个表格中的简单。例如,为了提高速度,您可能更愿意将
Sheet89
的内容复制到
Sheet1
(只有两个单元格)以避免出现此问题,或者实际上是编写脚本。至少要使范围尽可能小

然而,这是可能的,尽管可能很慢,需要授权

请清除
Sheet1 ColumnA
中的任何条件格式,然后:

Sheet1
中选择列A,格式,条件格式…,如果<代码>自定义公式为和

=countif(IMPORTRANGE(" k e y ","Sheet89!A:A"),A1)<>0
=countif(IMPORTRANGE(“key”,“Sheet89!A:A”),A1)0
突出显示您的选择并完成

上面的
k e y
表示
Sheet89
的唯一标识码(看起来像
1u4vq8vDne-AKMVDJQpregox7N99FQIB_kuJ_bG-PzM

该图像显示了当前图像C列中的内容(但在示例的A列中),图像中的F1和F2显示了示例的
Sheet89
的A列中的内容。浅棕色已应用条件格式::


新的谷歌表单允许您在不使用gas的情况下使用条件格式和ranges@ZigMandel是否可以在工作表中使用条件格式?有关如何与其他单元格中的值进行比较的示例,请参见此处:@Zig Mandel:New sheet不允许使用VLOOKUP公式。我期望得到的。它只允许一些基本功能。