Простые автоматизации для Google Drive

Ирина Чернова avatar | 12
FavoriteLoading В закладки
Простые автоматизации для Google Drive

Работаем с файлами в Google Apps Script.

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

Хранимые в Google Drive файлы можно быстро синхронизировать с жестким диском своего компьютера, а через него – с другими облачными сервисами.

Как использовать скрипты из статьи

  1. Заходим на docs.google.com и авторизируемся;
  2. Создаем новую таблицу;
  3. Открываем Инструменты -> Редактор скриптов;
  4. Копируем в окошко код из примеров и вносим необходимые правки;
  5. Запускаем скрипт и предоставляем ему все разрешения.

Получаем список файлов на диске

Google Drive появился три года назад. У многих пользователей за этот короткий срок успел образоваться необозримый бардак. Просто у сервиса есть две особенности, которые способствует воцарению хаоса в аккаунте юзера:

  • В одном каталоге можно создавать файлы и папки с одинаковыми именами;
  • Все документы, которые отправляются по почте, автоматически оказываются на Google Drive.

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

С помощью полученной таблицы можно быстро обозреть содержимое диска и отобрать список файлов для дальнейшей обработки (её примеры будут даны ниже).

[jscript]
function fileList()
{
currentSheet = SpreadsheetApp.getActive();
var files = DriveApp.getFiles();
i=1;
for(i=1;i<=100;i++)
{
files.hasNext();
var file = files.next();
currentSheet.getRange("A"+i).setValue(file.getName());
currentSheet.getRange("B"+i).setValue(file.getDateCreated());
currentSheet.getRange("C"+i).setValue(file.getMimeType());
currentSheet.getRange("D"+i).setValue(file.getSize());
currentSheet.getRange("E"+i).setValue(file.getId());
currentSheet.getRange("F"+i).setValue(file.getLastUpdated());
}
}
[/jscript]

Запустив данный скрипт, вы увидите, что Google Apps Script работает с файлами очень медленно. Каждое заполнение строки таблицы можно отследить визуально. В примерах дается код для обработки только 100 файлов, так просмотр всех документов может несколько десятков минут.

Если вам нужно обработать все документы на диске, необходимо морально подготовиться и вместо 100-кратной итерации использовать другой способ перебора файлов:

[jscript]
files = DriveApp.getFiles();
while (files.hasNext())
{
}
[/jscript]

Узнаем, кто имеет доступ к файлам

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

[jscript]
function filesSharing()
{
currentSheet = SpreadsheetApp.getActive();
var files = DriveApp.getFiles();
i=1;
j=1;
for(i=1;i<=100;i++)
{
editors=0;
files.hasNext();
var file = files.next();
currentSheet.getRange("A"+i).setValue(file.getName());
currentSheet.getRange("B"+i).setValue(file.getDateCreated());
currentSheet.getRange("C"+i).setValue(file.getMimeType());
if(file.getEditors().length>0)
{
for(j=1;j<=file.getEditors().length-1;j++)
{
editors=editors + ";" + file.getEditors()[j].getEmail();
}
currentSheet.getRange("D"+i).setValue(editors);
}
if(file.getViewers().length>0)
{
for(j=1;j<=file.getViewers().length-1;j++)
{
editors=editors + ";" + file.getViewers()[j].getEmail();
}
currentSheet.getRange("E"+i).setValue(editors);
}
}
}
[/jscript]

Проверяем, нет ли файлов в общем доступе

Файлам на Google Drive можно присваивать различные типы прав доступа: «доступен только владельцу», «доступен приглашенным пользователям», «доступен всем у кого есть ссылка» и «доступен всем в интернете». Если у документа настроить последний тип прав (а это легко сделать по неосторожности), то он попадет в поисковую выдачу Google. Случайные люди смогут его найти и просмотреть.

Проверить, нет ли таких в вашем хранилище, можно с помощью этого скрипта:

[jscript]
function fileAcess()
{
currentSheet = SpreadsheetApp.getActive();
var files = DriveApp.getFiles();
i=1;
j=1;
for(i=1;i<=100;i++)
{
files.hasNext();
var file = files.next();
if (file.getSharingAccess()=="ANYONE")
{
currentSheet.getRange("A"+j).setValue(file.getName());
currentSheet.getRange("B"+j).setValue(file.getDateCreated());
currentSheet.getRange("C"+j).setValue(file.getMimeType());
currentSheet.getRange("D"+j).setValue(file.getSize());
currentSheet.getRange("E"+j).setValue(file.getSharingAccess());
j++;
}
}
}
[/jscript]

Предоставляем пользователю доступ к файлам

Иногда бывают ситуации, когда человеку необходимо предоставить доступ к нескольким десяткам документов, лежащим в разных папках. Делать это вручную долго и неудобно. Лучше получить список всех файлов первым примером кода в статье (чтобы в столбце E были ID документов), по-быстрому выбрать из них нужные и пройтись по ним этим скриптом:

[jscript]
function addEditor()
{
currentSheet = SpreadsheetApp.getActive();
var files = DriveApp.getFiles();
i=1;
for(i=1;i<=10;i++)
{
id = currentSheet.getRange("E"+i).getValue();
DriveApp.getFileById(id).addEditor("[email protected]")
}
}
[/jscript]

Решаем пользователя доступа к файлам

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

В этом случае необходимо убедиться, что в столбце E есть уникальные идентификаторы документов.

[jscript]
function removeEditor()
{
currentSheet = SpreadsheetApp.getActive();
var files = DriveApp.getFiles();
i=1;
for(i=1;i<=100;i++)
{
id = currentSheet.getRange("E"+i).getValue();
DriveApp.getFileById(id).removeEditor("[email protected]");
}
}
[/jscript]

Создаем новые папки

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

[jscript]
function createFolders()
{
topFolder = DriveApp.createFolder("Рабочий архив");
for (j=2012;j<=2015;j++)
{
currentFolder = topFolder.createFolder(i);
for(i=1;i<=10;i++)
{
date = currentSheet.getRange("B"+i).getValue();
if(date.getYear()==j)
{
id = currentSheet.getRange("E"+i).getValue();
file = DriveApp.getFileById(id);
currentFolder.addFile(file);
}
}
}
}
[/jscript]

Если знаете другие полезные скрипты для Google Drive, пишите их в комментариях, спасибо!

 

Прокомментировать

🙈 Комментарии 12

  1. Майор avatar
    Майор6 декабря 2015
    0

    И что там обычно хранят ?

    Ирина Чернова avatar
    Ирина Чернова6 декабря 2015
    2

    @Майор, то же что и в Dropbox + созданное в Google Docs, Google Презентации, формы для сбора данных и т.д.

    Майор avatar
    Майор6 декабря 2015
    0

    @Ирина Чернова, А как же OneDrive? В нем не удобней?

    Ирина Чернова avatar
    Ирина Чернова6 декабря 2015
    2

    @Майор, для тех у кого на Windows телефон, планшет и компьютер – OneDrive удобнее безусловно) И там тоже можно писать автоматизации на Power Shell))) А я вот большая поклонница сервисов Google)

  2. shelphur avatar
    shelphur6 декабря 2015
    0

    Полезно, надо опробовать.

    Ирина Чернова avatar
    Ирина Чернова6 декабря 2015
    0

    @shelphur, go ahead:-)

  3. Sergey Zverev avatar
    Sergey Zverev6 декабря 2015
    0

    С++ для начинающих

    Ирина Чернова avatar
    Ирина Чернова6 декабря 2015
    1

    @Sergey Zverev, скорее «JavaScript для младших школьников»

  4. DArkadiy avatar
    DArkadiy26 октябрь 2017
    0

    как сохранить копию текущего файла с названием взятым из ячейки?
    в паку название которой взято из ячейки(если такой нет создать?

    DArkadiy avatar
    DArkadiy27 октябрь 2017
    0

    сейчас Я набросал функцию
    function myFunction() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheets()[0];
    var xx = sheet.getRange(“C21”).getValue();
    var source = SpreadsheetApp.getActive();
    var targetFolder = DriveApp.getFoldersByName(“папка”);
    var newFile = source.copy(xx);
    newFile.addToFolder(targetFolder);
    }
    она создаёт копию файла, с именем из ячейки, в корне гугл диска, и так как функция создана внутри файла она не имеет прав на перенос других файлов в другое место…
    как создать файл сразу в нужной директории?

  5. bbaublys avatar
    bbaublys2 июня 2018
    0

    Спасибо, полезно.
    @Ирина Чернова, а как получить список файлов в папке с определённым именем?

  6. bbaublys avatar
    bbaublys2 июня 2018
    0

    @Ирина Чернова, если в скрипте “Узнаем, кто имеет доступ к файлам” ищу не по 100 последним файлам, а по всем (“for(i=1;i<=100;i++)" заменил на "while (files.hasNext())"), то "Превышено максимально допустимое время выполнения".
    Это время можно увеличить?

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

Нашли орфографическую ошибку в новости?

Выделите ее мышью и нажмите Ctrl+Enter.

Как установить аватар в комментариях?

Ответ вот здесь