根据另一个单元格的十六进制值设置单元格背景颜色

问题描述 投票:0回答:1

从这个问题: 根据十六进制值设置单元格的背景颜色

我正在寻找一个可以在单元格中写下的公式,然后在相邻的单元格中出现我写下的十六进制颜色。这种颜色就留在那里。

他们用一个脚本回答了这个问题,该脚本改变了 Google 表格中的所有内容。这不是我要找的,因为它编辑整个文档。当我从单元格中删除十六进制代码时,颜色也会被删除。

我找到了另一个答案: 如何根据其他单元格中的RGB数据更改单元格的颜色

结果就是我正在寻找的,但代码对我不起作用,因为a)它们是RGB格式的,2)它们在onEdit上工作,并且我的Google表格中已经有一个onEdit函数。

我知道我可以使用条件格式,或者我可以转到调色板并煞费苦心地写下每一个十六进制代码。

但我一直在寻找的是:一个非常简洁的公式,当我在 Apps 脚本中复制粘贴该简洁公式的自定义函数后,将其写在非常特定的单元格或特定列或特定行中时,它就可以工作。

就像这个一样,但相反,哈哈 如何获取Google表格中颜色的十六进制代码

我正在自学 - 如何复制粘贴 - 代码,我只是想让事情按照我想要的方式进行。

google-apps-script google-sheets-formula background-color custom-function
1个回答
0
投票

在一个单元格中写下,然后在相邻的单元格中出现我写下的十六进制颜色

这不能用公式来完成,但可以用

onEdit(e)
脚本来完成,如下所示:

'use strict';

/**
* Simple trigger that runs each time the user manually edits the spreadsheet.
*
* @param {Object} e The onEdit() event object.
*/
function onEdit(e) {
  if (!e) {
    throw new Error('Please do not run the onEdit(e) function in the script editor window.');
  }
  setHexColorInNextCell_(e);
}


/**
* Changes the backgroup color of a cell when a hex color code is entered in the cell to its left.
*
* @param {Object} e The onEdit() event object.
*/
function setHexColorInNextCell_(e) {
  // version 1.0, written by --Hyde, 21 July 2024
  //  - see https://stackoverflow.com/q/78773946/13045193
  try {
    const parameters = [

      ////////////////////////////////
      // [START modifiable parameters]
      {
        sheetsToWatch: /./i,
        sheetsToExclude: /^(Master)$/i,
        patternsToWatch: [/#[a-f\d]{6}/i], // hex color codes are like #00ff00
      },
      // [END modifiable parameters]
      ////////////////////////////////

    ];
    const value = e.value || e.range.getDisplayValue();
    if (!value) return;
    let sheet, sheetName;
    const settings = parameters.find(p =>
      (!p.patternsToWatch.length || p.patternsToWatch.some(p => value.match(p)))
      && (sheetName = sheetName || (sheet = sheet || e.range.getSheet()).getName()).match(p.sheetsToWatch)
      && (!p.sheetsToExclude || !sheetName.match(p.sheetsToExclude))
    );
    if (!settings) return;
    const nextCell = e.range.offset(0, 1);
    nextCell.setBackground(value);
  } catch (error) {
    e.source.toast(`${error.message} ${error.stack}`, 'Error in setHexColorInNextCell_()', 30);
    throw error;
  }
}

我的 Google 表格中已经有 onEdit 功能

将当前的

onEdit()
函数重命名为
anotherOnEdit()
之类的名称,并将其添加到上面的
onEdit(e)
函数中,如下所示:

  // ...
  setHexColorInNextCell_(e);
  anotherOnEdit(e);
}

当您在单元格中输入十六进制颜色代码(例如

#ff0000
)时,脚本将自动运行。

请参阅简单触发器onEdit(e)最佳实践

© www.soinside.com 2019 - 2024. All rights reserved.