Операции в Гугл Таблице с помощью скрипта
  • Ігор Білецький
  • 22.11.2021
  • Коментарі відсутні

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

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

Статья является дополнением к основной статье по гугл скриптам и программным решениям при работе с гугл таблицей.

Открыть таблицу (присвоить переменной таблицу), чтобы работать с ней

Обратиться к активной таблице (с которой мы работаем в текущий момент:

let ss = SpreadsheetApp.getActiveSpreadsheet();

Обратиться к другой таблице:

let ss = SpreadsheetApp.openByUrl('ссылка на таблицу'); //используем ссылку на таблицу
let ss = SpreadsheetApp.openById('идентификатор таблицы'); //используем идентификатор таблицы

Я предпочитаю использовать идентификатор.  Как узнать идентификатор таблицы, описано ЗДЕСЬ.

Создать, переименовать, скопировать, удалить таблицу

SpreadsheetApp.create("НоваяТаблица");

В результате выполнения данной команды создастся новая таблица с именем «НоваяТаблица»

Созданную таблицу при необходимости можно переименовать. Приведу часть кода:

let newSpreadsheet = SpreadsheetApp.create("новаяТаблица");
newSpreadsheet.setName("переименованнаяТаблица");

В данном примере мы вначале создаем новую таблицу и сохраняем ссылку на нее в переменную newSpeadsheet. Затем переименовываем ее, используя переменную newSpreadsheet.

Конечно же, между этими двумя строчками может быть другой код. Главное, не перезаписать переменную newSpreadsheet, с помощью которой мы обращаемся к нашей таблице.

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

Приведу необходимый код:

let myTable = SpreadsheetApp.openById(newID);
myTable.setName("переименованнаяТаблица");

Данным кодом мы вначале получаем существующую таблицу по ее идентификатору, а затем переименовываем.

Важное замечание. На момент написания статьи метод «setName» почему-то отсутствовал в списке доступных методов, которые появляются после ввода точки, хотя все работает.

Это касается объектов, созданных с помощью класса SpreadsheetApp. Если мы работаем с классом DocumentApp, метод «setName» есть в списке доступных методов.

Например, создадим новый документ, а затем переименуем его:

let doc1 = DocumentApp.create("НовыйДокумент");
doc1.setName("ПереименованыйДокумент");

Как вы могли заметить, класс SpreadsheetApp работает с гугл таблицами, а DocumentApp — с гугл документами.

Чтобы скопировать существующий файл, используем класс DriveApp. Приведу фрагмент кода, затем расшифрую его:

let newDoc = DriveApp.getFileById(docID).makeCopy(); //получаем копию документа
newDoc.setName("СкопированныйДокумент"); //переименовываем документ

Вначале мы получаем существующий документ (обращаемся к нему, используя идентификатор) и копируем его. Затем для скопированного документа устанавливаем новое имя.

В данном примере не важно, что вы копируете, таблицу, документ или просто файл в вашем облаке. Класс DriveApp работает со всеми файлами и папками.

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

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

let f1 = DriveApp.getFilesByName("CocaCola.jpg").next(); //получаем наш файл по имени
let f2 = f1.makeCopy(); //делаем копию
f2.setName("Pepsi.jpg"); //переименовываем

Данным кодом мы вначале находим по имени требуемый файл (метод «next» находит первый попавшийся файл, удовлетворяющий заданным условиям), затем делаем его копию и переименовываем.

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

Для того, чтобы удалить файл (переместить в корзину), воспользуемся методом «setTrashed»:

let myFile = DriveApp.getFileById(fileID);
myFile.setTrashed(true);

Вначале обращаемся к нужному файла с помощью идентификатора (fileID), затем отправляем его в корзину.

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

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

Узнать, существует папка или нет

function ifFolderExist(folderName) {
//проверка, существует папка или нет
return DriveApp.getFoldersByName(folderName).hasNext();
}

Данная функция получает имя папки и возвращает «истину» (true), если такая папка есть, либо «ложь» (false) в противном случае.

Создать папку

function createFolder(folderName) {
//создаем папку
 if (!ifFolderExist(folderName)) {//создаем, если папки нет
  DriveApp.createFolder(folderName); 
 }
}

Функция получает имя папки и если папка не существует — создает ее.

Получить список всех файлов из заданной папки

function getFiles(folderName) {
//возвращает список файлов из заданной папки (файл, как объект) 
  let dirSearch = DriveApp.getFoldersByName(folderName);
  
  let arr1 = new Array(); //подготавливаем массив для файлов
  let fileList = dirSearch.next().getFiles();

  while(fileList.hasNext) {
    try {
      let file = fileList.next();
      arr1.push(file);
      Logger.log(file.getName());
    }
    catch(e) {
      Logger.log("конец списка");
      return arr1;
    }
    
  }
}

Функция на входе получает имя папки и возвращает массив, содержащий список всех файлов. Причем, каждый элемент массива — не просто имя файла, а объект, содержащий файл.

Иными словами, мы можем работать с элементом массива, как с файлом.

Например, представим, что нам необходимо обработать папку с текстовыми файлами. Приведу пример кода и комментарии к нему. В коде будем использовать функцию, описанную выше.

function testReadFile() {
//чтение файлов из указанной папки
  let dirName = "txt";
  let myFiles = getFiles(dirName);
  let encodingFile = "UTF-8"; //кодировка файла
  let text = myFiles[0].getBlob().getDataAsString(encodingFile);

  Logger.log(text);
}

Вначале функция считывает все файлы из папки «txt» и помещает их в массив myFiles.

Затем, в качестве примера, берем первый из найденных файлов (в массиве под номером 0) и получаем его содержимое в виде текста. Полученное содержимое помещаем в  переменную  text и выводим в консоль.

В данном коде использовались методы класса file. Подробную информацию можно прочитать в документации по google apps script.

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

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

Кстати, если наш сайт принес вам пользу и вы хотите сказать нам «Спасибо» и поддержать нас 🙏, то это можно сделать ЗДЕСЬ.

 
Рекомендую почитать:

 

Залишити коментар

Есть клиенты? Используйте CRM в Гугл Таблице для учета

Підтримати сайт! Дякуємо!

Подякувати і подтримати сайт