是否可以根据单元格的文本值自动更改单元格的背景?这些值将用于任意数量的值,而不仅仅是预定义的。其想法是根据文本值生成“散列”,然后根据该散列随机选择颜色。它是什么颜色并不重要,只要不同的值有不同的颜色可以很容易地区分。
例如,假设单元格具有以下值:
它们都有不同的背景色,因为它们包含不同的文本值。实际的背景色并没有什么区别。理想的情况是,如果背景颜色是‘暗’,文本颜色将是白色,如果背景颜色是‘光’,文本颜色将是黑色。这样你就可以随时阅读课文了。
发布于 2022-05-26 14:40:10
这是我对这个问题的近似:
const sS = SpreadsheetApp.getActiveSheet()
const docProperties = PropertiesService.getDocumentProperties()
function colorTheDifference() {
const { getRow, getNumRows, getColumn, getNumColumns } = sS.getDataRange()
const [rw, nRw, cl, nCl] = [getRow(), getNumRows(), getColumn(), getNumColumns()]
const values = sS.getRange(rw, cl, nRw, nCl).getValues()
for (let i = rw; i <= nRw; i++) {
for (let j = cl; j <= nCl; j++) {
const word = values[i - 1][j - 1]
if(!word) continue
sS.getRange(i, j).setBackground(saveColor(word))
}
}
}
function saveColor(word) {
if (docProperties.getKeys().includes(word)) {
return docProperties.getProperty(word)
} else {
const randomColorPick = randomColor()
docProperties.setProperty(word, randomColorPick)
return randomColorPick
}
}
// https://stackoverflow.com/a/5092846/14271633
const randomColor = () => '#' + (Math.random() * 0xFFFFFF << 0).toString(16).padStart(6, '0');
function onOpen() {
// colorTheDifference()
SpreadsheetApp
.getUi()
.createMenu('Custom Menu')
.addItem('Color It', 'colorTheDifference')
.addToUi()
}


脚本分析所有的单元格值,在DocumentProperties中将它们与随机颜色相关联(当样本大小增加时,这可能会导致某种问题,并且应该实现一个控件来检查这种颜色是否存在),然后将该颜色添加到单元格中。
如您所见,我将其添加到菜单中的一个函数中,但可以在onOpen中调用它,以便在打开文档时直接解析它,或者将其与onEdit关联(我认为这将是过度的)。
这不是解决问题的最佳方法,应该朝着batchUpdate的方向发展。
发布于 2022-05-26 19:50:01
有趣的问题。
我编写了一些东西,使用onEdit()函数根据某一列中的值格式化/突出显示/着色给定的行/范围。
当我完成完整的文档记录之后,我将在下面发表评论,但希望能够很容易地找到如何调整userParams对象。
在这张样品单上试一试。B列中的值将根据“图例”的背景/字体颜色/text样式突出显示行。
https://stackoverflow.com/questions/72392510
复制相似问题