如果文本被另一个单元格匹配,请使用Google Apps脚本有条理地格式化一个单元格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果文本被另一个单元格匹配,请使用Google Apps脚本有条理地格式化一个单元格相关的知识,希望对你有一定的参考价值。

我有一个电子表格,其前四列(A,B,C,D)是从一个单独的主电子表格中动态导入的。

列E,F旨在根据左侧列中的动态数据获取静态输入。

A列包含个人姓名。

我想使用G列作为A列的静态参考,以确保当A +到D列中的动态数据随着新输入的到来而移动时,E&F列中的输入可以通过手动剪切和粘贴轻松保存在正确的行中或从主表中删除。

要做到这一点,我想要一个脚本,它有条件地格式化G列中的条目,当它们与A列中的条目匹配时(粗体,斜体,为文本着色),并且不会与使用“切割和粘贴”切割和粘贴相关的问题发生冲突。谷歌工作表中的标准UI条件格式,其中剪切和粘贴将“打破”条件格式范围。

我们将动态列A中的值复制到静态列G,然后使用条件格式引用回A。

我这里有一个基本脚本(从另一个stackoverflow海报中收集),但是需要做一些工作才能做我需要它做的事情。

function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A:G");
var values = range.getValues();

//for each row that data is present
for(var i = 0; i < values.length; i++) {
var cell = sheet.getRange(i + 1, 7);

//check if the first value of that row is exactly "Client Name"
if(values[i][0] === "Client Name") {

//if it is, check for "Client Name" in the same row in G [6].  If so, make 
it green.

if(values[i][6] === "Client Name") {
    cell.setBackground('green');
  } else {
    cell.setBackground('white');
  }

} else {

//In any other case, make it white.
cell.setBackground('white');
}
}   
}    

我希望脚本检查单元格A3:A中的值是否等于G3中的值:G以及是否要格式化G3:G中的文本。

现有脚本的表格“模拟”在这里:

https://docs.google.com/spreadsheets/d/13iPM83I5ecskuBaBin8hepTyBqD29ng0Zp3e6DBcuEk/edit?usp=sharing

谢谢大家的帮助!

答案

如果您将条件格式设置为使用自定义公式

=AND($G1=$A1, NOT(ISBLANK($A1)))

然后你使用“仅粘贴值”(编辑>粘贴特殊或cmd + shift + vctrl,如果在Windows上),那么你将不需要一个脚本。

使用条件格式和粘贴值会快得多。

否则,当它与A中的相应值不匹配时,您可以使用此脚本更改G列中的格式。

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1"); // getActiveSheet() can yield unexpected results
  var rangeA = sheet.getRange("A:A");
  var rangeG = sheet.getRange("G:G");
  var valuesA = rangeA.getValues();
  var valuesG = rangeG.getValues();
  var backgrounds = []; // Create an array for the background colors
  var fontColors = []; // Create an array for the font colors

  //for each row that data is present
  for(var i = 0; i < valuesA.length; i++) {
    var aValue = valuesA[i][0];
    var gValue = valuesG[i][0];
    if((aValue != "") && (gValue === aValue)) { // If value in A is NOT blank AND A == G
      backgrounds.push(["green"]); 
      fontColors.push(["white"]);
    } else {
      backgrounds.push([null]); // Using null will reset the background color formatting
      fontColors.push([null]); // Using null will reset the font color formatting
    }
  }  
  rangeG.setBackgrounds(backgrounds); // Set the background colors all at once for speed.
  rangeG.setFontColors(fontColors); // Set the font colors all at once for speed.
}

以上是关于如果文本被另一个单元格匹配,请使用Google Apps脚本有条理地格式化一个单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何获取特定匹配值的起始单元格和结束单元格地址?

Google表格 - 将单元格中的多个单词与另一个单元格进行比较并计算匹配数量

使用getValue()的Google Sheet两行单元格

使用 Google 表格下拉菜单更改单元格背景颜色而不是文本

如果相邻单元格不为空 + 匹配,则从上面的单元格自动填充

有没有办法从 Google 表格单元格中获取“标题文本”?