代码之家  ›  专栏  ›  技术社区  ›  Audrey G

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

  •  0
  • Audrey G  · 技术社区  · 1 年前

    从这个问题: Set the background color to a cell based on a hex value

    我正在寻找一个公式,我可以在一个单元格中写下来,然后在相邻的单元格中显示我写下的HEX颜色。那种颜色就留在那里。

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

    我找到了另一个答案: How to change the color of a cell based on rgb data in other cells

    结果就是我想要的,但代码不适合我,因为a)它们是RGB格式的,2)它们可以在onEdit上工作,而我的谷歌工作表中已经有了onEdit功能。

    我知道我可以使用条件格式,或者我可以去调色板,痛苦地写下每一个HEX代码。

    但我一直在寻找的是:一个非常简洁的公式,当然,当我在Apps Script中复制粘贴该简洁公式的自定义函数后,将其写在一个非常具体的单元格、特定的列或特定的行中时,它就会起作用。

    就像这个,但反过来,哈哈 How to get the hexadecimal codes of colors in google sheets

    我正在自学如何复制粘贴代码,我只是想让事情按照我的意愿发展。

    1 回复  |  直到 1 年前
        1
  •  1
  •   doubleunary    1 年前

    在单元格中写下,然后在相邻单元格中出现我写下的HEX颜色

    这不能用公式来完成,但可以用 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;
      }
    }
    

    我的谷歌工作表中已经有了onEdit功能

    重命名当前 onEdit() 功能类似 anotherOnEdit() 并将其添加到 on编辑(e) 上面的函数,如下所示:

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

    当您输入十六进制颜色代码时,该脚本将自动运行,例如 #ff0000 在一个牢房里。

    请参阅 Simple triggers onEdit(e) best practices .