Добавление границ на основе сгруппированных строк и условного форматирования в Google Sheets - PullRequest
1 голос
/ 02 мая 2019

У меня есть лист, который выглядит следующим образом:

Image 1

Как видите, это простая система отслеживания запасов.Прямо сейчас у меня есть 3 продукта.Некоторые продукты не имеют разного цвета (например, Tacky Design Tee), поэтому для них вариант (цвет) остается пустым.Одна проблема, с которой я столкнулся, заключается в том, что на самом деле становится немного трудно понять, в какой строке я нахожусь, потому что некоторые ячейки остаются пустыми.В идеале, я бы хотел, чтобы таблица выглядела следующим образом:

Image 2

С границами существует четкое разделение между продуктами.Я хочу, чтобы это было динамичным.Логика может исходить из того, что столбец B не является пустым, и все строки сразу после него, где B пусто, эти строки обрабатываются как группа и ограничиваются снизу.

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

РЕДАКТИРОВАТЬ:

Ссылки на электронные таблицы:

До (Что у меня есть): https://docs.google.com/spreadsheets/d/1r3ybiy5Gaw7SYDZlYA68HmvPCCoxI-Bz7qpPCSK146A/edit?usp=sharing

После (в основном то, что я хочу): https://docs.google.com/spreadsheets/d/1sS3Y_MH4DaYD4QW19vjwExd7jc4H-eB5OAGb3J4njUQ/edit?usp=sharing

Короче говоря, я хочу сгруппировать товары по их названиям на основе этих двух условий:

  • Если строка выполняетне имея имени, мы предполагаем, что это вариант ближайшего идущего вверх ряда с именем продукта.
  • Если две строки имеют одинаковое имя продукта, мы, очевидно, предполагаем, что они являются вариантами одного и того же продукта..

1 Ответ

1 голос
/ 02 мая 2019

Как насчет этого примера сценария? В этом примере сценария, когда вы редактируете ячейку на листе «Лист1», граница динамически добавляется триггером события OnEdit. Пожалуйста, подумайте об этом как один из нескольких ответов. Ход этого скрипта следующий.

  1. Скрипт автоматически запускается триггером события OnEdit при редактировании ячейки.
  2. Получить название листа.
  3. Очистить все границы.
  4. Создание списка диапазонов для добавления границы.
  5. Добавьте границу, используя список диапазонов.

Я использовал вышеуказанный поток, потому что я не уверен в ситуации редактирования ячеек.

Пример сценария:

Пожалуйста, скопируйте и вставьте следующий скрипт в связанный с контейнером скрипт электронной таблицы (в этом случае, пожалуйста, сделайте это с электронной таблицей "До".) Когда вы редактируете ячейку, граница добавляется.

function onEdit(e) {
  if (e.source.getActiveSheet().getSheetName() == "Sheet1") {
    var sheet = e.source.getActiveSheet();
    sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).setBorder(null, null, null, null, false, false);
    var values = sheet.getRange(2, 2, sheet.getLastRow() - 1, 1).getValues();
    var rangeList = values.reduce(function(ar, e, i) {
      if (i > 0 && values[i - 1][0] != e[0] && e[0] != "") {
        ar.push("A" + (i + 1) + ":D" + (i + 1));
      }
      return ar;
    }, [])
    rangeList.push(sheet.getRange(sheet.getLastRow(), 1, 1, sheet.getLastColumn()).getA1Notation());
    sheet.getRangeList(rangeList).setBorder(null, null, true, null, false, false, "black", SpreadsheetApp.BorderStyle.SOLID_THICK);
  }
}

Примечание:

  • В этом примере сценария, когда отредактированное имя листа "Sheet1", сценарий запускается. Если вы хотите изменить это, пожалуйста, измените if (e.source.getActiveSheet().getSheetName() == "Sheet1") {.

Ссылки:

Edit:

  • Ваша первая общая таблица отличается от вашей реальной таблицы.
    • Общая таблица в вашем ответном комментарии является актуальной таблицей.
  • Вы хотите проверить столбец «C» и добавить границу от столбца «A» к «P».
  • Данные начинаются со строки 3.

Если мое понимание верно, измените приведенный выше скрипт следующим образом.

От:

var values = sheet.getRange(2, 2, sheet.getLastRow() - 1, 1).getValues();

Кому:

var values = sheet.getRange(3, 3, sheet.getLastRow() - 1, 1).getValues();

И

От:

if (i > 0 && values[i - 1][0] != e[0] && e[0] != "") {
  ar.push("A" + (i + 1) + ":D" + (i + 1));
}

Кому:

if (i > 0 && values[i - 1][0] != e[0] && e[0] != "") {
  ar.push("A" + (i + 2) + ":P" + (i + 2));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...