В данной статье рассмотрим различные операции, которые можно проделать с гугл таблицей с помощью скрипта. Дополнительно в конце статьи рассмотрим парочку интересных методов, что я использовал в своей практике.
Также в данную статью войдет, как создать новый файл в облаке, как скопировать файл, удалить (переместить в корзину) и прочее.
Статья является дополнением к основной статье по гугл скриптам и программным решениям при работе с гугл таблицей.
Открыть таблицу (присвоить переменной таблицу), чтобы работать с ней
Обратиться к активной таблице (с которой мы работаем в текущий момент:
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.
На сегодня пока все. Надеюсь, информация будет вам полезна. Дополнительно рекомендую к прочтению обзорную статью с различными решениями, скриптами и прочими полезностями при работе с гугл таблицами.
Статья будет дополняться новыми материалами, поэтому сохраните ссылку на нее.
Рекомендую почитать:
- «10 бирж фриланса и удаленной работы для новичков и профи: список и рекомендации по заработку»
- «Доход на партнерских/реферальных программах: примеры и полезные советы»
- «Скачать футажи, видео, видеошаблоны, презентации, графику и т.д.: цифровые ресурсы без ограничений»