TGViewer
LawCoder LawCoder @law_coder · 1.17K subscribers
Post #181 1.13K
Сегодня в 10.01. Ирина Панкова автор канала "Матерый инхаус" публикует пост с инструкцией как с помощью excel таблицы и такой-то матери скрипта VBA сделать реестр файлов папке. Довольно частая рутинная задача для юриста.

Вы знаете, что мимо таких штук я мимо не прохожу. Сразу делаю аналог на GAS и вам показываю. И обычно это занимало у меня немало времени. Полдня мог легко убить на написание работающего скрипта. А потом же еще инструкцию как этим пользоваться для вас писать.

Вайбкодинг изменил это в корне. Прочитал пост. Взял инструкцию из него. Кинул чатугпт с просьбой сделать тоже самое, но на GAS. В 10.25 (24 минуты с момента публикации поста) у меня есть работающее решение из таблицы. По сути этот пост я дольше пишу, чем потратил времени на разработку.

Вот работающий код:
/**
* onOpen — создаёт в меню Таблицы пункт для запуска нашего скрипта
*/
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Файлы')
.addItem('Список файлов на Диске…', 'showFolderPrompt')
.addToUi();
}

/**
* Вызывается из меню, запрашивает у пользователя ID папки и запускает основной обход
*/
function showFolderPrompt() {
var ui = SpreadsheetApp.getUi();
var response = ui.prompt(
'Список файлов',
'Введите ID папки на Google Диске:',
ui.ButtonSet.OK_CANCEL
);
if (response.getSelectedButton() != ui.Button.OK) {
ui.alert('Отмена');
return;
}
var folderId = response.getResponseText().trim();
if (!folderId) {
ui.alert('Пустой ID — отмена.');
return;
}
listFiles(folderId);
ui.alert('Готово!');
}

/**
* Основная функция: создаёт новый лист и запускает рекурсию
* @param {string} folderId — ID папки на Google Диске
*/
function listFiles(folderId) {
var folder;
try {
folder = DriveApp.getFolderById(folderId);
} catch (e) {
SpreadsheetApp.getUi().alert('Не удалось открыть папку: ' + e.message);
return;
}

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = 'Список ' + folder.getName();
// Если лист с таким именем уже есть, удаляем его
var existing = ss.getSheetByName(sheetName);
if (existing) ss.deleteSheet(existing);

// Создаём новый лист и пишем заголовки
var sheet = ss.insertSheet(sheetName);
var headers = ['Имя файла', 'Путь', 'Размер (байт)', 'Дата создания', 'Дата изменения'];
sheet.appendRow(headers);

// Запускаем рекурсивный обход
listFilesInFolder_(folder, sheet, folder.getName());
sheet.autoResizeColumns(1, headers.length);
}

/**
* Рекурсивно обходит папку и записывает информацию о файлах.
* @param {Folder} folder Текущая папка DriveApp
* @param {Sheet} sheet Лист для вывода
* @param {string} pathSoFar Путь от корня (для первого вызова — имя корневой папки)
*/
function listFilesInFolder_(folder, sheet, pathSoFar) {
// Перебор файлов
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
sheet.appendRow([
file.getName(),
pathSoFar,
file.getSize(),
file.getDateCreated(),
file.getLastUpdated()
]);
}
// Перебор вложенных папок
var subfolders = folder.getFolders();
while (subfolders.hasNext()) {
var sub = subfolders.next();
listFilesInFolder_(sub, sheet, pathSoFar + '/' + sub.getName());
}
}
  • 🔥 10
  • 👍 5
More from @law_coder
  1. Sep 18, 2026Когда зашёл прочитать пятничный инсайт, а там два поста и много букв, понимаю вас, коллеги…
  2. Sep 18, 2026Пятничный инсайт Часть 2 У нас уже есть задокументированный случай, когда студент вышел из…
  3. Sep 18, 2026Пятничный инсайт Бесконечно скучно от того, что в сфере ИИ нет движения в сторону западног…
  4. Sep 11, 2026Пятничный инсайт Главный вопрос которого: "С чего вы взяли, что отобрав рутину, сделаете н…
  5. Sep 10, 2026В следующий раз когда кто-то вам скажет: хоспаде, успокойся ты уже со своей конфиденциальн…
  6. Sep 9, 2026Для тех, у кого, как и у меня, закончилось место на телефоне, но очень хочется установить…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →