You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将单个单元格的条件格式应用到含相同文本的多个单元格?

嘿,这个需求确实没法只用公式搞定——Google Sheets的内置函数没法直接读取单元格背景色,也没法批量给所有匹配文本的单元格上色,得靠Apps Script来实现。我给你整理了一套完整的解决方案,包括代码和操作步骤:

实现全队名同步背景色的方案

核心逻辑

  1. 监听N列(队色选择列)的编辑操作:当你选好队色后,自动抓取对应行M列的队名,以及N列的背景色
  2. 监听M列(队名列)的编辑操作:当你修改队名后,自动用对应N列的颜色同步所有旧队名的单元格
  3. 遍历整个表格,把所有匹配目标队名的单元格统一设置成对应颜色

完整脚本代码

打开你的Google表格,点击顶部菜单栏的「扩展程序」→「Apps脚本」,在弹出的脚本编辑器里粘贴以下代码:

function onEdit(e) {
  const sheet = e.source.getActiveSheet();
  const editedRange = e.range;
  
  // 只监听M列(第13列)和N列(第14列)的编辑
  if (editedRange.getColumn() !== 13 && editedRange.getColumn() !== 14) return;
  
  const row = editedRange.getRow();
  // 跳过表头行(假设你的表头在第3行及以上,可根据实际情况修改这个数值)
  if (row <= 3) return;
  
  let targetTeamName, targetColor;
  
  if (editedRange.getColumn() === 14) {
    // 编辑队色列时:获取对应队名+队色,先同步当前行M列的颜色
    targetTeamName = sheet.getRange(row, 13).getValue();
    targetColor = editedRange.getBackground();
    sheet.getRange(row, 13).setBackground(targetColor);
  } else {
    // 编辑队名列时:获取新队名+对应N列的颜色
    targetTeamName = editedRange.getValue();
    targetColor = sheet.getRange(row, 14).getBackground();
  }
  
  // 空值直接跳过,避免无效操作
  if (!targetTeamName || !targetColor) return;
  
  // 批量处理所有单元格,提升效率(比逐个改快很多)
  const dataRange = sheet.getDataRange();
  const allValues = dataRange.getValues();
  const allBackgrounds = dataRange.getBackgrounds();
  const totalRows = dataRange.getNumRows();
  const totalCols = dataRange.getNumColumns();
  
  for (let i = 0; i < totalRows; i++) {
    for (let j = 0; j < totalCols; j++) {
      if (allValues[i][j] === targetTeamName) {
        allBackgrounds[i][j] = targetColor;
      }
    }
  }
  
  dataRange.setBackgrounds(allBackgrounds);
}

操作步骤

  1. 粘贴完代码后,点击脚本编辑器顶部的「保存」按钮,随便给脚本起个名字(比如TeamColorSync)
  2. 回到表格,第一次编辑N列或M列时,会弹出授权提示,跟着提示完成授权就行(需要允许脚本访问你的表格数据)
  3. 之后你再选队色、改队名,整个表格里所有匹配该队名的单元格都会自动同步颜色啦

小提示

  • 如果你的表格有多个工作表,这个脚本默认只作用于当前编辑的表。要是想同步所有工作表,可以修改代码里的sheet变量,改成遍历所有工作表的逻辑
  • 如果队名有大小写差异(比如"RedTeam"和"redteam"),可以把匹配逻辑改成allValues[i][j].toString().toLowerCase() === targetTeamName.toLowerCase(),这样就能忽略大小写匹配了

内容的提问来源于stack exchange,提问作者Phil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:21:51