问题:
我正在尝试执行以下操作:
将 Sheet2 中单元格的背景颜色设置为 Sheet1 中与 Sheet2 中具有相同值的单元格。
其想法是比较 Sheet2 中也存在于 Sheet1 中的所有值,并从 Sheet2 中的单元格中获取预制背景,并将 Sheet2 中的这些预制背景设置到 Sheet1 中具有匹配值的单元格。
目标是在匹配时根据单元格值自动设置背景,无论顺序如何(以避免必须手动对数百个不同的匹配值进行设置)。
插图示例:
在 Sheet2 中,我预设了一个范围 A1:A10,其中包含 10 个不同的值,所有值都有其独特的背景。
在 Sheet1 中,我有与 Sheet2 中相同的 10 个值以及其他不匹配的值。此外,Sheet1 中的 10 个匹配值“分散”在范围 A1:AG20 中(与 Sheet2 的范围不同,可以是任何范围)。
我想要得到的结果是:
其他密切问题:
我在这里发现了密切的问题:
Copying background color from cells on a different tab of the same sheet
这里:
Google Sheets: Change background color of cell using content of another cell
这里:
Change cell value based on the cell's background color in Google Sheets
到目前为止我的脚本:
根据其他问题,我想出了以下代码:
function myFunction() {
const sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
const rngsh2 = sheet2.getRange("A1:A10");
const colorssh2 = rngsh2.getBackgroundObjects();
const valuessh2 = rngsh2.getValues();
const sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
const rngsh1 = sheet1.getRange("A1:G20");
const valuessh1 = rngsh1.getValues();
if(valuessh2 == valuessh1){
sheet1.getRange(rngsh1).setBackgroundObjects(colorssh2);
}
}
但它没有设置背景。
示例表:
这里是sample sheet
上面的代码有什么问题吗?
非常感谢您的帮助!
检查文档:
我已经检查并尝试了这些引用文献:
编辑:
taylor.2317答案让我意识到我忘记说 Sheet1 中的值会重复,并且颜色也需要相同的重复背景(在指定范围 A1:AG20 的代码中应该没有区别):
以下是显示重复值的新屏幕截图:
Sheet2 输入:
我尝试使用 Sheet1 中的重复值获得的结果是:
当前Sheet1结果:
最佳答案
function copycolors() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet0');
const cA = sh.getRange(1,1,sh.getLastRow()).getDisplayValues().flat();//values
const bA = sh.getRange(1,1,sh.getLastRow()).getBackgrounds().flat();//colors
let colors = {pA:[]};
cA.forEach((c,i) => {
colors[c]=bA[i];
colors.pA.push(c);
});
const osh = ss.getSheetByName('Sheet1');
const vs = osh.getDataRange().getDisplayValues();
const bs = osh.getDataRange().getBackgrounds();
let bgA = vs.map((r,i) =>{
r.forEach((c,j) =>{
let idx = colors.pA.indexOf(c);
if(~idx) {
bs[i][j] = colors[c];
}
});
return bs[i];
});
osh.getRange(1,1,bgA.length,bgA[0].length).setBackgrounds(bgA);
}
关于google-apps-script - 如何使用 Google Apps 脚本将一张工作表中的值的背景颜色设置为另一张工作表中具有匹配值的单元格?编辑部分添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70511152/