Google Apps Script: Как очистить данные на листе?

Что такое Google Apps Script и зачем он нужен для работы с таблицами?

Google Apps Script – это облачный язык сценариев, позволяющий автоматизировать задачи в Google Workspace, включая Google Sheets. Он основан на JavaScript и предоставляет мощные инструменты для работы с таблицами, включая очистку данных, форматирование, импорт/экспорт и многое другое. GAS позволяет автоматизировать рутинные операции, такие как удаление устаревшей информации, стандартизация форматов данных и подготовка отчетов.

Основные методы очистки данных: обзор

Для очистки данных в Google Sheets через Apps Script доступны различные методы, позволяющие удалять содержимое, форматирование, примечания и даже целые строки/столбцы. Выбор метода зависит от конкретной задачи и необходимого уровня очистки. Например, можно просто удалить все значения из ячеек или полностью очистить лист, вернув его к исходному состоянию.

Подготовка: получение доступа к листу Google Sheets через Apps Script

Прежде чем начать очистку данных, необходимо получить доступ к нужному листу Google Sheets через Apps Script. Это делается с помощью следующего кода:

/**
 * @OnlyCurrentDoc
 */

/**
 *  Получает активную таблицу и лист.
 *  @return {GoogleAppsScript.Spreadsheet.Sheet} Активный лист.
 */
function getActiveSheet(): GoogleAppsScript.Spreadsheet.Sheet {
  const ss: GoogleAppsScript.Spreadsheet.Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = ss.getActiveSheet();
  return sheet;
}

/**
 *  Пример функции для получения листа по имени.
 *  @param {string} sheetName Имя листа.
 *  @return {GoogleAppsScript.Spreadsheet.Sheet | null} Лист, если найден, иначе null.
 */
function getSheetByName(sheetName: string): GoogleAppsScript.Spreadsheet.Sheet | null {
  const ss: GoogleAppsScript.Spreadsheet.Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet: GoogleAppsScript.Spreadsheet.Sheet | undefined = ss.getSheetByName(sheetName);
  return sheet ? sheet : null;
}

Способы очистки данных на листе Google Sheets

Удаление содержимого всех ячеек: метод `clearContent()`

Метод clearContent() удаляет только содержимое ячеек, оставляя форматирование нетронутым. Это полезно, когда нужно очистить данные, но сохранить, например, стили заголовков или условное форматирование.

function clearSheetContent() {
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = getActiveSheet();
  sheet.clearContent();
}

Удаление форматирования ячеек: метод `clearFormat()`

Метод clearFormat() удаляет все форматирование ячеек, включая шрифты, цвета, границы и т.д., не затрагивая содержимое. Этот метод пригодится, когда нужно сбросить форматирование к значениям по умолчанию.

function clearSheetFormat() {
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = getActiveSheet();
  sheet.clearFormat();
}

Полная очистка: удаление содержимого и форматирования методом `clear()`

Метод clear() объединяет функциональность clearContent() и clearFormat(), удаляя как содержимое, так и форматирование ячеек. Это наиболее полный способ очистки листа.

function clearSheetCompletely() {
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = getActiveSheet();
  sheet.clear();
}

Удаление примечаний и заметок с ячеек: метод `clearNote()`

Метод clearNote() удаляет все примечания (заметки) из ячеек на листе. Это полезно для удаления комментариев, оставленных другими пользователями.

function clearSheetNotes() {
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = getActiveSheet();
  sheet.clearNotes();
}

Очистка определенных диапазонов ячеек

Указание диапазона для очистки: использование `getRange()`

Для очистки только определенной области на листе используйте метод getRange() для получения доступа к нужному диапазону, а затем примените к нему методы очистки.

Реклама
function clearSpecificRange() {
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = getActiveSheet();
  const range: GoogleAppsScript.Spreadsheet.Range = sheet.getRange("A1:C10");
  range.clearContent();
}

Очистка выбранных столбцов или строк

Можно очистить определенные столбцы или строки, используя getRange() с указанием нужных индексов.

function clearSpecificColumns() {
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = getActiveSheet();
  // Очистка столбцов A и B
  const range: GoogleAppsScript.Spreadsheet.Range = sheet.getRange("A:B");
  range.clearContent();
}

function clearSpecificRows() {
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = getActiveSheet();
  // Очистка строк 1 и 2
  const range: GoogleAppsScript.Spreadsheet.Range = sheet.getRange("1:2");
  range.clearContent();
}

Примеры кода для очистки конкретных диапазонов

Предположим, нам нужно очистить только данные в столбце с ценами (например, столбец ‘C’), при этом оставить заголовки нетронутыми. Код будет выглядеть так:

function clearPriceColumn() {
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = getActiveSheet();
  // Получаем последнюю строку с данными
  const lastRow: number = sheet.getLastRow();
  // Очищаем столбец C, начиная со второй строки (пропуская заголовок)
  const range: GoogleAppsScript.Spreadsheet.Range = sheet.getRange(2, 3, lastRow - 1, 1);
  range.clearContent();
}

Автоматизация очистки данных с помощью триггеров

Создание триггеров для запуска скрипта очистки (по времени, при изменении и т.д.)

Apps Script позволяет автоматизировать очистку данных с помощью триггеров. Триггеры могут запускать скрипт по расписанию (например, каждый день в определенное время) или при определенных событиях (например, при изменении листа).

Практический пример: автоматическая очистка листа каждый день

Чтобы создать триггер для ежедневной очистки листа, выполните следующие шаги:

В редакторе Apps Script выберите "Редактировать" > "Триггеры текущего проекта".

Нажмите "Добавить триггер".

Выберите функцию, которую нужно запускать (например, clearSheetCompletely).

Выберите тип триггера "По времени".

Выберите "Ежедневно" и укажите время запуска.

Сохраните триггер.

Ограничения и рекомендации при использовании триггеров

Триггеры имеют ограничения по времени выполнения скрипта.

Слишком частое выполнение скрипта может привести к превышению лимитов Google Apps Script.

Для сложных задач рекомендуется использовать оптимизированный код и асинхронные операции.

Продвинутые методы очистки и оптимизация скриптов

Удаление пустых строк и столбцов

Для удаления пустых строк и столбцов можно использовать следующий код:

function deleteEmptyRowsAndColumns() {
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = getActiveSheet();

  // Удаление пустых строк
  const lastRow: number = sheet.getLastRow();
  for (let i: number = lastRow; i > 0; i--) {
    if (sheet.getRange(i, 1).getValue() === "") {
      sheet.deleteRow(i);
    }
  }

  // Удаление пустых столбцов
  const lastColumn: number = sheet.getLastColumn();
  for (let i: number = lastColumn; i > 0; i--) {
    if (sheet.getRange(1, i).getValue() === "") {
      sheet.deleteColumn(i);
    }
  }
}

Обработка ошибок и логирование

Важно обрабатывать ошибки в скриптах и вести логирование для отслеживания работы скрипта и выявления проблем.

try {
  // Код, который может вызвать ошибку
  getActiveSheet().clearContent();
} catch (e: any) {
  Logger.log("Ошибка: " + e.toString());
}

Оптимизация скорости выполнения скрипта для больших таблиц

Для больших таблиц чтение и запись данных по одной ячейке может быть очень медленным. Вместо этого рекомендуется использовать методы getValues() и setValues() для работы с массивами данных.

function optimizeClearData() {
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = getActiveSheet();
  const dataRange: GoogleAppsScript.Spreadsheet.Range = sheet.getDataRange();
  const numRows: number = dataRange.getNumRows();
  const numColumns: number = dataRange.getNumColumns();

  // Создаем массив нулей для очистки данных
  const emptyData: any[][] = Array(numRows).fill(null).map(() => Array(numColumns).fill(""));

  // Записываем пустой массив в диапазон данных
  dataRange.setValues(emptyData);
}

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