从另一个 Google Sheet 获取条件格式数据(颜色)

Get Conditional Formatting Data (color) from another Google Sheet

在 sheet 1 中,我有一个条件规则,如果单元格有数据则显示为红色,如果单元格为空则显示为绿色。

在sheet 2中,我使用公式=Sheet1!A1从sheet 1中检索对应的sheet 2单元格中的数据。但是,我只想检索单元格颜色而不是数据值。

如何从单元格而不是数据中检索颜色?

根据您的情况,我认为需要使用 Google Apps 脚本。那么,例如,下面的示例脚本怎么样?

示例脚本:

请将以下脚本复制并粘贴到电子表格的脚本编辑器中并保存脚本。

const GETCOLOR = range => SpreadsheetApp.getActiveSpreadsheet().getRange(range).getBackgrounds();

function onEdit(e) {
  const sheet = e.source.getActiveSheet();
  if (sheet.getSheetName() != "Sheet1") return;
  const f = "=GETCOLOR";
  const t = "=sample";
  [[f, t], [t, f]].forEach(([a, b]) => e.source.createTextFinder(`^\${a}`).matchFormulaText(true).useRegularExpression(true).replaceAllWith(b));
}
  • 当您使用此脚本时,请将=GETCOLOR("Sheet1!A1")=GETCOLOR("Sheet1!A1:B10")的公式作为自定义函数。这样,背景颜色作为十六进制值返回。

  • 关于新增的功能onEdit,来自In sheet 1 I have a conditional rule that displays the cell as red if it has data or green if it is empty.,在这种情况下,我认为当编辑单元格并更改背景颜色时,您可能想要更新 GETCOLOR 的自定义函数。为了实现这一点,我使用了onEdit。编辑“Sheet1”的单元格时,更新GETCOLOR的自定义函数。

注:

  • 如果要将背景色从源范围复制粘贴到目标范围,下面的示例脚本怎么样?当您使用脚本编辑器运行此脚本时,背景颜色被复制。

      function sample() {
        const srcRange = "Sheet1!A1"; // Please set the source range as the A1Notation.
        const dstRange = "Sheet2!A1"; // Please set the destination range as the A1Notation.
        const ss = SpreadsheetApp.getActiveSpreadsheet();
        const bk = ss.getRange(srcRange).getBackgrounds();
        ss.getRange(dstRange).offset(0, 0, bk.length, bk[0].length).setBackgrounds(bk);
      }
    

参考: