Из этого вопроса: Установите цвет фона для ячейки на основе шестнадцатеричного значения
Я ищу формулу, которую можно записать в ячейку, а затем в соседней ячейке появляется записанный мной HEX-цвет. И этот цвет остается там.
Ответили скриптом, который меняет все в гугл листе. Это не то, что я ищу, потому что он редактирует весь документ. А когда я удаляю HEX-код из ячейки, цвет тоже удаляется.
Я нашел другой ответ: Как изменить цвет ячейки на основе данных RGB в других ячейках
Результат — это то, что я ищу, но код у меня не работает, потому что а) они в RGB и 2) они работают с onEdit, а у меня уже есть функция onEdit в моем листе Google.
Я понимаю, что могу использовать условное форматирование или могу пойти в палитру и кропотливо записать каждый из HEX-кодов.
Но то, что я искал, это очень краткая формула, которая работает, когда я записываю ее в очень конкретную ячейку, определенный столбец или определенную строку после того, как я, конечно, скопирую пользовательскую функцию для этой краткой формулы в Apps Script.
Примерно так же, только наоборот, лол. Как получить шестнадцатеричные коды цветов в таблицах Google
Я сам учусь копировать код, я просто хочу, чтобы все работало так, как я хочу.
запишите в ячейку, затем в соседней ячейке появится 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 background 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;
}
}
Скрипт запускается автоматически при вводе в ячейку шестнадцатеричных кодов цветов, например #ff0000
.
У меня уже есть функция onEdit в моем листе Google.
Переименуйте текущую функцию onEdit()
во что-то вроде anotherOnEdit_()
и добавьте ее к функции onEdit(e)
выше, например так:
// ...
setHexColorInNextCell_(e);
anotherOnEdit_(e);
}
См. Простые триггеры и лучшие практики onEdit(e).
Хм... ответ такой, потому что вы указали "в соседней ячейке появляется тот HEX-цвет, который я записал" и ни разу не упомянули о необходимости обрабатывать копирование-вставку нескольких значений одновременно. Пожалуйста, не предъявляйте новых требований после получения ответа. Задавайте только один вопрос за пост . Вместо этого опубликуйте новый вопрос.
Спасибо! Я все еще изучаю этикет здесь, извините за такую резкость. Я очень доволен кодом и просто копирую и вставляю каждое значение одно за другим. Если у меня возникнут новые запросы или вопросы, я обязательно буду писать более подробно и, да, только один вопрос в каждом посте. Еще раз большое спасибо!
Я увидел только две небольшие проблемы: 1) Я избегал функции onEdit, потому что изначально мне нужна была формула или кнопка, чтобы я мог контролировать эту вещь. 2) Я не могу копировать и вставлять более одного кода одновременно, потому что он заполнит все затронутые ячейки первым выбранным цветом. Но обе небольшие проблемы легко исправить: 1) я должен отпустить это, как Эльза, и 2) я просто скопирую и вставлю один шестнадцатеричный код один за другим. Огромное вам спасибо, это превосходно и работает как шарм, мне оно нравится, и я навсегда сохраню его в своем сердце и в своих таблицах Google.