Google Таблицы – удалите строку на Sheet2, когда я изменяю количество на sheet1 на 0, и сдвиньте все элементы ниже вверх.

Вопрос или проблема

У меня есть таблица Google, которую я использую для учета своего инвентаря. У меня есть 2 листа в 1 файле, на Листе1 есть строки с информацией о моем товаре, платформе, количестве и регионе. Второй лист и код должны быть такими же, как на Листе1, чтобы отслеживать товар, платформу, количество и его регион.

НО если количество на первом листе равно 0, я хочу, чтобы вся строка или линия на листе2, где количество было установлено на 0 на листе 1, была удалена, и это нужно сделать только на листе2.

У меня есть следующий код, который обновляет список с первого листа на второй и пытается удалить, но часть удаления ничего не делает, сейчас на листе 2 значение просто отображается с 0 вместо того, чтобы вся строка или линия была удалена.

По сути, я просто хочу, чтобы вся строка на листе2 была удалена, если я установлю количество на 0 на листе1, но оставляя все как есть на листе1 только для ввода чисел, изменения нужно вносить только на лист2.

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

function deleteRowsIfQuantityZero() {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet1 = ss.getSheetByName("Sheet1");
   var sheet2 = ss.getSheetByName("Sheet2");
   var range1 = sheet1.getDataRange();
   var values1 = range1.getValues();
   var range2 = sheet2.getDataRange();
   var values2 = range2.getValues();

   for (var i = 0; i < values1.length; i++) {
     if (values1[i][2] === 0) { 
     sheet2.deleteRow(i + 1);
     }
   }
 }

Image table for reference

“Удалить” строку в таблице на основе значения другой таблицы

Вы можете достичь цели “удаления” строки, если соответствующая строка на 1-м листе равна 0, используя этот подход.

Скрипт ниже использует массив для хранения значений с первого листа, а затем передает их на второй лист, но только если столбец количества в первой таблице не равен 0, фактически удаляя товар с количеством 0 на втором листе.

Для повышения удобства использования вы можете попробовать использовать триггеры. См. Триггеры для получения дополнительной информации.

Пример кода

function deleteRowsIfQuantityZero() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var editableSheet = ss.getSheetByName("Sheet1");
  var newUpdatedItems = [];
  var receiverSheet = ss.getSheetByName("Sheet2");
  var esRange = editableSheet.getRange(2, 1, editableSheet.getLastRow() - 1, editableSheet.getLastColumn());
  var newData = esRange.getValues();
  for (i = 0; i < newData.length; i++) {
    if (newData[i][3] > 0) {
      newUpdatedItems.push(newData[i])
    }
  }

  try {
    var clearRange = receiverSheet.getRange(2, 1, receiverSheet.getLastRow() - 1, receiverSheet.getLastColumn());
    clearRange.clearContent();
    var pasteRange = receiverSheet.getRange(2, 1, newUpdatedItems.length, newUpdatedItems[0].length);
    pasteRange.setValues(newUpdatedItems);
  } catch (e) {
    var pasteRange = receiverSheet.getRange(2, 1, newUpdatedItems.length, newUpdatedItems[0].length);
    pasteRange.setValues(newUpdatedItems);
  }
}

Пример вывода после выполнения функции

Лист1

Лист1

Лист2

Лист2

Ссылки: Класс Range()

Ответ или решение

Введение

Управление запасами является важной частью любого бизнеса. Использование Google Sheets для отслеживания инвентаря предоставляет удобство и гибкость. В этом ответе мы рассмотрим, как настраивать Google Sheets таким образом, чтобы автоматически удалять строки из одного листа на основе значений в другом. Мы будем работать с двумя листами: Sheet1 и Sheet2, и наша цель заключается в удалении строки из Sheet2, когда количество на Sheet1 устанавливается на ноль.

Проблема

Ваша текущая задача заключается в том, чтобы когда количество товара на Sheet1 становится равным нулю, соответствующая строка на Sheet2 также удалялась. Важно отметить, что эти изменения должны затрагивать только Sheet2, а Sheet1 должен оставаться нетронутым для ввода данных. Также необходимо сдвигать строки выше после удаления, чтобы избежать пустых мест.

Решение

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

Код для удаления строк на Sheet2

function deleteRowsIfQuantityZero() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName("Sheet1");
  var sheet2 = ss.getSheetByName("Sheet2");
  var values1 = sheet1.getDataRange().getValues();
  var values2 = sheet2.getDataRange().getValues();

  // Создаем массив для хранения значений, которые будут оставлены в Sheet2
  var updatedValues = [];

  for (var i = 0; i < values1.length; i++) {
    // Проверяем, если количество на Sheet1 больше 0
    if (values1[i][2] > 0) { // Предполагаем, что количество находится в третьем столбце (индекс 2)
      updatedValues.push(values1[i]);
    }
  }

  // Очищаем текущие данные на Sheet2
  sheet2.clearContents();

  // Устанавливаем новые значения только для тех, которые имеют количество больше 0
  if (updatedValues.length > 0) {
    sheet2.getRange(1, 1, updatedValues.length, updatedValues[0].length).setValues(updatedValues);
  }
}

Как работает данный код

  1. Получение доступов к листам: Мы создаем переменные sheet1 и sheet2, которые ссылаются на соответствующие листы в нашей таблице.
  2. Чтение значений: Используем getValues(), чтобы получить данные с обоих листов.
  3. Фильтрация значений: Создаем массив updatedValues, в который помещаем только те строки из values1, где количество больше нуля.
  4. Очистка Sheet2: Прежде чем обновить содержимое Sheet2, мы очищаем его с помощью clearContents().
  5. Запись в Sheet2: Затем мы используем setValues(), чтобы отправить только отфильтрованные данные из updatedValues в Sheet2.

Заключение

Этот подход позволяет вам эффективно управлять вашим инвентарем, автоматически удаляя ненужные строки из Sheet2 при изменении количества на Sheet1. Код легко адаптируем, и его можно настроить для выпадения триггеров — тем самым обеспечивая автоматическое выполнение с заданной периодичностью или при изменении данных на листе.

Таким образом, следуя описанным выше шагам и используя предложенный код, вы сможете автоматизировать процесс управления запасами и легко контролировать актуальность информации в ваших таблицах.

Оцените материал
Добавить комментарий

Капча загружается...