从这个问题: 根据十六进制值设置单元格的背景颜色
我正在寻找一个可以在单元格中写下的公式,然后在相邻的单元格中出现我写下的十六进制颜色。这种颜色就留在那里。
他们用一个脚本回答了这个问题,该脚本改变了 Google 表格中的所有内容。这不是我要找的,因为它编辑整个文档。当我从单元格中删除十六进制代码时,颜色也会被删除。
我找到了另一个答案: 如何根据其他单元格中的RGB数据更改单元格的颜色
结果就是我正在寻找的,但代码对我不起作用,因为a)它们是RGB格式的,2)它们在onEdit上工作,并且我的Google表格中已经有一个onEdit函数。
我知道我可以使用条件格式,或者我可以转到调色板并煞费苦心地写下每一个十六进制代码。
但我一直在寻找的是:一个非常简洁的公式,当我在 Apps 脚本中复制粘贴该简洁公式的自定义函数后,将其写在非常特定的单元格或特定列或特定行中时,它就可以工作。
就像这个一样,但相反,哈哈 如何获取Google表格中颜色的十六进制代码
我正在自学 - 如何复制粘贴 - 代码,我只是想让事情按照我想要的方式进行。
在一个单元格中写下,然后在相邻的单元格中出现我写下的十六进制颜色
这不能用公式来完成,但可以用
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)最佳实践。