Установите цвет фона ячейки на основе значения HEX из другой ячейки

Из этого вопроса: Установите цвет фона для ячейки на основе шестнадцатеричного значения

Я ищу формулу, которую можно записать в ячейку, а затем в соседней ячейке появляется записанный мной HEX-цвет. И этот цвет остается там.

Ответили скриптом, который меняет все в гугл листе. Это не то, что я ищу, потому что он редактирует весь документ. А когда я удаляю HEX-код из ячейки, цвет тоже удаляется.

Я нашел другой ответ: Как изменить цвет ячейки на основе данных RGB в других ячейках

Результат — это то, что я ищу, но код у меня не работает, потому что а) они в RGB и 2) они работают с onEdit, а у меня уже есть функция onEdit в моем листе Google.

Я понимаю, что могу использовать условное форматирование или могу пойти в палитру и кропотливо записать каждый из HEX-кодов.

Но то, что я искал, это очень краткая формула, которая работает, когда я записываю ее в очень конкретную ячейку, определенный столбец или определенную строку после того, как я, конечно, скопирую пользовательскую функцию для этой краткой формулы в Apps Script.

Примерно так же, только наоборот, лол. Как получить шестнадцатеричные коды цветов в таблицах Google

Я сам учусь копировать код, я просто хочу, чтобы все работало так, как я хочу.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 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).

Я увидел только две небольшие проблемы: 1) Я избегал функции onEdit, потому что изначально мне нужна была формула или кнопка, чтобы я мог контролировать эту вещь. 2) Я не могу копировать и вставлять более одного кода одновременно, потому что он заполнит все затронутые ячейки первым выбранным цветом. Но обе небольшие проблемы легко исправить: 1) я должен отпустить это, как Эльза, и 2) я просто скопирую и вставлю один шестнадцатеричный код один за другим. Огромное вам спасибо, это превосходно и работает как шарм, мне оно нравится, и я навсегда сохраню его в своем сердце и в своих таблицах Google.

Audrey G 21.07.2024 03:39

Хм... ответ такой, потому что вы указали "в соседней ячейке появляется тот HEX-цвет, который я записал" и ни разу не упомянули о необходимости обрабатывать копирование-вставку нескольких значений одновременно. Пожалуйста, не предъявляйте новых требований после получения ответа. Задавайте только один вопрос за пост . Вместо этого опубликуйте новый вопрос.

doubleunary 21.07.2024 07:16

Спасибо! Я все еще изучаю этикет здесь, извините за такую ​​резкость. Я очень доволен кодом и просто копирую и вставляю каждое значение одно за другим. Если у меня возникнут новые запросы или вопросы, я обязательно буду писать более подробно и, да, только один вопрос в каждом посте. Еще раз большое спасибо!

Audrey G 23.07.2024 03:11

Другие вопросы по теме