Есть задача: В смету должны попадать столбцы внутренней таблицы: A, B, C, D, E, F, G, H, J, M, N, O, P, S, T, U, V, W
При этом дано: Таблица-источник
Что делать, если мне не нужны буквы столбцов, потому что в дальнейшем я буду опираться только на заголовки?
Как вывести заголовки, опираясь на буквы столбцов?
В приложении решение и приглашение поразмять мозги - может быть найдется другой интересный вариант?
Наш канал и чат про Таблицы
При этом дано: Таблица-источник
Что делать, если мне не нужны буквы столбцов, потому что в дальнейшем я буду опираться только на заголовки?
Как вывести заголовки, опираясь на буквы столбцов?
В приложении решение и приглашение поразмять мозги - может быть найдется другой интересный вариант?
Наш канал и чат про Таблицы
👍8✍1🔥1🥱1
Привет, друзья!
Ozon обновил свой API для получения информации о товарах, и мы оперативно (ну почти) адаптировали (на самом деле, это hotfix) нашу библиотеку под эти изменения. Если вы используете наш код для загрузки товаров из Ozon в Google Таблицы, этот пост для вас!
• Ozon изменил структуру API для получения данных о товарах
• Это вызвало ошибки при попытке загрузить информацию в таблицы
• Мы выпустили обновление библиотеки, которое решает проблему
1. Откройте редактор скриптов вашей Google Таблицы
2. В левом меню найдите "Библиотеки"
3. Найдите нашу библиотеку в списке
4. Измените версию библиотеки на 6
5. Сохраните изменения
6. Готово!
На всякий случай:
• Инструкция по работе с редактором скриптов
• Подробнее про библиотеки
• Обучающая статья по интеграции с Ozon
Обновленный API предоставляет расширенную информацию о товарах, включая:
• Информацию о комиссиях
• Данные об уценённых товарах
• Расширенные настройки видимости
• Ценовые индексы
• Дополнительные статусы товаров
Спасибо, что используете наши решения для автоматизации! Вы делаете правильный выбор, развивая свой бизнес с помощью современных инструментов.
Раздел: #обновления #API #решения
Хотите узнать больше? Присоединяйтесь к нашему сообществу!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥9🙏5
Доброе утро! Ловите обновление!
🟢 Актуальная версия библиотеки:
🟢 Новая версия Таблицы для получения товаров из Озон здесь
🟢 Код открытый, стать соучастником можно здесь: https://github.com/googlesheets-ru/OzonFromGAS
12Обратите внимание на существенные изменения в наборе данных, которые возвращает Озон
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🎉1🙏1
Привет, автоматизаторы! Недавно в нашем чате возник интересный вопрос о защите данных. Сегодня поделимся решением от одного из подписчиков, который разработал удобный скрипт для автоматической защиты строк при изменении статуса!
Представьте, что у вас есть таблица, где нескольким пользователям доступно редактирование. Когда заказ, платеж или другая запись получает статус "Подтверждено", важно защитить эти данные от случайных изменений. Но как это сделать автоматически? Именно здесь пригодится наш скрипт!
Автоматическая защита данных позволяет:
1. Предотвратить случайное изменение важной информации
2. Сохранить целостность подтвержденных записей
3. Избавиться от ручной настройки защиты для каждой строки
4. Гибко контролировать, какие столбцы защищать, а какие оставить доступными
В скрипте отслеживается изменения в столбце K (Подтверждено?). Когда там появляется значение "Подтверждено", автоматически защищаются ячейки от A до J в этой строке. Если статус меняется на другой — защита снимается.
function onEdit(e) {
// Проверяем, что объект события существует
if (!e || !e.source || !e.range) {
return;
}
const sheet = e.source.getActiveSheet();
const range = e.range;
const row = range.getRow();
const column = range.getColumn();
const value = e.value;
// Указываем столбец, до которого нужно защищать строку
const endColumn = 10; // Защищаем до столбца J
// Проверяем, что изменение произошло в нужном столбце (K)
if (column === 11) {
// Получаем все защиты на листе
const protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
// Ищем защиту для текущей строки
const existingProtection = protections.find(prot => {
const protRange = prot.getRange();
return (
protRange.getRow() === row &&
protRange.getSheet().getName() === sheet.getName() &&
protRange.getColumn() === 1 &&
protRange.getNumColumns() === endColumn
);
});
if (value === "Подтверждено") {
// Если выбрано "Подтверждено" и защиты ещё нет, устанавливаем её
if (!existingProtection) {
const protection = sheet.getRange(row, 1, 1, endColumn).protect();
protection.setDescription(`Защищено: строка ${row} до столбца ${endColumn}`);
protection.removeEditors(protection.getEditors());
protection.setWarningOnly(false);
}
} else {
// Если значение изменено, снимаем защиту с этой строки
protections.forEach(prot => {
const protRange = prot.getRange();
if (
protRange.getRow() === row &&
protRange.getSheet().getName() === sheet.getName()
) {
prot.remove();
}
});
}
}
}1. Триггер
onEdit отслеживает редактирование данных в таблице2. Скрипт проверяет, произошло ли изменение в 11-м столбце (K)
3. Если в ячейке выбрано "Подтверждено", создается защита для строки
4. Защита применяется от 1-го до 10-го столбца (A-J)
5. Если значение меняется на другое, защита автоматически снимается
6. Проверка на существующую защиту предотвращает создание дубликатов
🤩 Где это особенно полезно:
- Таблицы с заказами или клиентскими данными
- Финансовые отчеты и бухгалтерия
- Системы учета и инвентаризации
- Любые таблицы с совместным доступом
- Проектная документация
1. Измените значение
column === 11 на номер вашего столбца со статусом2. Настройте
endColumn = 10 на нужное количество защищаемых столбцов3. Поменяйте условие
value === "Подтверждено" на ваше значение статусаРаздел: #скрипты #защита_данных #автоматизация
Функции: #onEdit #protect #getProtections
onEdit
protect
getProtections
А как вы защищаете важные данные в своих таблицах? Поделитесь в комментариях!
Хотите больше полезных скриптов и решений для Google Таблиц?
#GoogleSheets #GoogleAppsScript
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍10✍3
Forwarded from Construction Sheets
Media is too big
VIEW IN TELEGRAM
Апдейт файловой системы
Разрабатывал этот функционал чтобы он решал вопросы связанные как с исполнительной документацией, так и с другими задачами в работе ПТО.
⭐️ Нововведения:
- переработана и улучшена функция добавления файлов
- добавлена функция замены файлов
- кардинально переработана База документов (упрощена и улучшена загрузка файлов в неё)
Все подробности смотри в видео)
🐞 Баги исправлены:
- файлы на скрытых и отфильтрованных строках больше не выводятся на печать
- теперь замена файлов работает с несколькими ячейками одновременно
Все показанные функции — бесплатны для использования, так что тестируйте на здоровье🤝
👉 @ConstructionSheets х @pto_cdo
Разрабатывал этот функционал чтобы он решал вопросы связанные как с исполнительной документацией, так и с другими задачами в работе ПТО.
⭐️ Нововведения:
- переработана и улучшена функция добавления файлов
- добавлена функция замены файлов
- кардинально переработана База документов (упрощена и улучшена загрузка файлов в неё)
Все подробности смотри в видео)
🐞 Баги исправлены:
- файлы на скрытых и отфильтрованных строках больше не выводятся на печать
- теперь замена файлов работает с несколькими ячейками одновременно
Все показанные функции — бесплатны для использования, так что тестируйте на здоровье🤝
👉 @ConstructionSheets х @pto_cdo
👍10🤯3🔥1
Апогей выпадающих списков! Тема раскрыта окончательно и бесповоротно. Игорь поставил жирную точку в этом вопросе.
Telegram
Игорь Дроздов in Таблицы и Скрипты Гугл - чат
Зависимые выпадающие списки с подробными инструкциями, дружественным интерфейсом, рассчитанные на большие объёмы.
Копируем таблицу себе,
радуемся как всё просто и понятно, ставим лайки))
Копируем таблицу себе,
радуемся как всё просто и понятно, ставим лайки))
👍17🔥8✍2🥱1
This media is not supported in your browser
VIEW IN TELEGRAM
Сделал быстрый обзор на макросы Яндекс Таблиц ⚡️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5⚡2
Привет, умные пользователи Google Таблиц! 👋
Сегодня мы разберем одну из самых гибких и мощных функций – ДВССЫЛ (INDIRECT). Эта функция может показаться сложной на первый взгляд, но она открывает перед вами совершенно новые возможности автоматизации. Готовы прокачать свои навыки? 💪
📋 Что такое ДВССЫЛ и зачем она нужна?
Функция ДВССЫЛ превращает текстовую строку в ссылку на ячейку или диапазон. Звучит просто, но именно эта особенность позволяет создавать динамические формулы, которые меняются в зависимости от содержимого других ячеек!
=ДВССЫЛ(ссылка_как_текст; [a1])
Где:
-
ссылка_как_текст — текстовая строка, которая будет преобразована в ссылку-
a1 — логическое значение (ИСТИНА или ЛОЖЬ), указывающее на стиль ссылки (по умолчанию ИСТИНА)=ДВССЫЛ("A" & B1)Если в B1 находится число 5, формула вернет значение из ячейки A5. Измените B1 на 10, и формула будет брать значение из A10!
=ДВССЫЛ(
C1 & "!B2:B10"
)
Где C1 содержит название листа (например, "Январь"). Теперь вы можете переключаться между данными разных месяцев, просто меняя значение в C1!
=СУММ(
ДВССЫЛ(
"A1:A" &
СЧЁТЗ(A:A)
)
)
Формула создает диапазон, который автоматически расширяется при добавлении новых данных в столбец A!
=СУММЕСЛИ(
ДВССЫЛ("A2:A100");
D1;
ДВССЫЛ(E1 & "2:" & E1 & "100")
)
В этом примере:
- D1 содержит критерий (например, "Москва")
- E1 содержит букву столбца (например, "B" для выручки или "C" для прибыли)
Меняя значение в E1, вы можете суммировать разные показатели без изменения формулы!
=СУММПРОИЗВ(
ДВССЫЛ(
"'" & G1 & "'!C5:C25"
)
)
Где G1 содержит название периода (например, "Q1-2023"). Создайте выпадающий список в G1, и ваш дашборд будет обновляться одним кликом!
- ДВССЫЛ требует больше ресурсов для вычисления, чем обычные ссылки, поэтому не злоупотребляйте ею в больших таблицах
- Функция не работает с ссылками на другие файлы таблиц
- При изменении названий листов не забудьте обновить все строковые ссылки в формулах
ДВССЫЛ=ДВССЫЛ(
АДРЕС(
СТРОКА();
СТОЛБЕЦ()-1
)
)
Эта формула возвращает значение из ячейки слева от текущей, независимо от её расположения!
Вы уже опережаете 90% пользователей Google Таблиц, если начали применять ДВССЫЛ в своей работе. Эта функция – настоящий признак профессионала!
Раздел: #формулы #решения
Формулы: #ДВССЫЛ #СУММЕСЛИ #СУММПРОИЗВ #СЧЁТЗ #АДРЕС
Живите и работайте эффективнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥10🙏3✍1👏1👌1💯1
🔥 СУПЕР-ФОРМУЛА QUERY: ФИЛЬТРАЦИЯ ДАННЫХ В ОДНУ СТРОКУ 🔥
Устали создавать сложные фильтры и сводные таблицы? Познакомьтесь с мощной формулой QUERY!
Представьте: у вас таблица с данными о продажах (A1:D100), где:
• A – дата
• B – менеджер
• C – товар
• D – сумма
Вам нужно найти все продажи Андрея за март, где сумма больше 10000₽.
Решение одной формулой:
✨ Что делает эта магия?
• Выбирает все строки, соответствующие условиям
• Автоматически сортирует по сумме (от большей к меньшей)
• Обновляется при изменении исходных данных
QUERY — это мини-SQL прямо в ваших таблицах! Изучите её, и вам больше не придется создавать десятки промежуточных расчетов.
Какие запросы вы бы хотели автоматизировать?
Автор: знаток формул @Drozdov_Igor_Advisd
Наш канал и чат про Таблицы
Устали создавать сложные фильтры и сводные таблицы? Познакомьтесь с мощной формулой QUERY!
Представьте: у вас таблица с данными о продажах (A1:D100), где:
• A – дата
• B – менеджер
• C – товар
• D – сумма
Вам нужно найти все продажи Андрея за март, где сумма больше 10000₽.
Решение одной формулой:
=QUERY(A1:D100; "SELECT * WHERE B = 'Андрей' AND A >= date '2023-03-01' AND A <= date '2023-03-31' AND D > 10000 ORDER BY D DESC")
✨ Что делает эта магия?
• Выбирает все строки, соответствующие условиям
• Автоматически сортирует по сумме (от большей к меньшей)
• Обновляется при изменении исходных данных
QUERY — это мини-SQL прямо в ваших таблицах! Изучите её, и вам больше не придется создавать десятки промежуточных расчетов.
Какие запросы вы бы хотели автоматизировать?
Автор: знаток формул @Drozdov_Igor_Advisd
Наш канал и чат про Таблицы
🔥14👍8💯2
📊 КАК ОДНА ФОРМУЛА ЗАМЕНИЛА 500 СТРОК ВЫЧИСЛЕНИЙ 📊
ARRAYFORMULA — тайное оружие продвинутых пользователей Google Таблиц!
Часто приходится копировать формулу вниз по столбцу? Забудьте об этом!
Пример: у вас список товаров (A2:A500) и их цены (B2:B500). Нужно рассчитать цены с НДС.
Обычный подход: написать в C2 формулу =B2*1.2 и протянуть её на 500 строк вниз 😴
Умный подход: написать в C2 одну формулу:
🚀 Преимущества:
• Работает автоматически для всего диапазона
• Обновляется при добавлении новых строк
• Игнорирует пустые строки
• Формула хранится в одной ячейке
Бонус-трюк: Вы можете комбинировать несколько вычислений!
Какие ещё вычисления вы бы хотели автоматизировать такой формулой?
Автор: эксперт по Таблицам @Drozdov_Igor_Advisd
Наш канал и чат про Таблицы
ARRAYFORMULA — тайное оружие продвинутых пользователей Google Таблиц!
Часто приходится копировать формулу вниз по столбцу? Забудьте об этом!
Пример: у вас список товаров (A2:A500) и их цены (B2:B500). Нужно рассчитать цены с НДС.
Обычный подход: написать в C2 формулу =B2*1.2 и протянуть её на 500 строк вниз 😴
Умный подход: написать в C2 одну формулу:
=ARRAYFORMULA(IF(B2:B500<>"", B2:B500*1.2, ""))
🚀 Преимущества:
• Работает автоматически для всего диапазона
• Обновляется при добавлении новых строк
• Игнорирует пустые строки
• Формула хранится в одной ячейке
Бонус-трюк: Вы можете комбинировать несколько вычислений!
=ARRAYFORMULA(IF(B2:B500<>"", "Цена с НДС: "&TEXT(B2:B500*1.2;"0.00")&" ₽", ""))
Какие ещё вычисления вы бы хотели автоматизировать такой формулой?
Автор: эксперт по Таблицам @Drozdov_Igor_Advisd
Наш канал и чат про Таблицы
👍21💯1🆒1
Участник нашего сообщества @Sehusao разработал Таблицу для тестирования API Telegram-ботов
https://docs.google.com/spreadsheets/d/1Gr3cQ34Vl9-JczegxD-wG-0TeEHHsE86_RIlsmKi_H8/edit
С ее помощью можно попробовать разные параметры, посмотреть запрос и ответ сервера. Если развернуть Web App, входящие сообщения будут записываться в лог.
Для параметров, отличных от базовых типов (строка, число, логический), нужно вручную указывать JSON. В документе есть утилиты для проверки корректности JSON и преобразования JS объекта в JSON.
Сейчас в таблице десяток методов API, но новые легко добавлять копированием шаблона запроса.
Таблица на английском.
https://docs.google.com/spreadsheets/d/1Gr3cQ34Vl9-JczegxD-wG-0TeEHHsE86_RIlsmKi_H8/edit
С ее помощью можно попробовать разные параметры, посмотреть запрос и ответ сервера. Если развернуть Web App, входящие сообщения будут записываться в лог.
Для параметров, отличных от базовых типов (строка, число, логический), нужно вручную указывать JSON. В документе есть утилиты для проверки корректности JSON и преобразования JS объекта в JSON.
Сейчас в таблице десяток методов API, но новые легко добавлять копированием шаблона запроса.
Таблица на английском.
Google Docs
Telegram Bot API (shared)
🔥9👍6🥱1💯1
🧠 ФУНКЦИЯ INDIRECT: ДИНАМИЧЕСКАЯ МАГИЯ В ТАБЛИЦАХ 🧠
Хотите создать динамические ссылки между листами? Функция INDIRECT творит чудеса!
Представьте: у вас таблица с месячными отчетами, каждый месяц — на отдельном листе (Январь, Февраль, Март...).
Обычный способ: переходить между листами и копировать данные 😩
Умный способ: в ячейке A1 создаем выпадающий список месяцев, а затем используем:
Теперь при выборе месяца в A1, формула автоматически подтягивает данные с нужного листа!
⚡️ Продвинутый пример: создайте сводный отчет по всем месяцам:
Эта формула сразу вернет данные из ячейки B10 для всех трех листов в виде столбца!
INDIRECT — как машина времени для данных: мгновенно перемещает информацию между разными измерениями вашей таблицы.
Какие ещё "невозможные" задачи вы хотели бы решить в ваших таблицах?
Автор: мастер данных @Drozdov_Igor_Advisd
Наш канал и чат про Таблицы
Хотите создать динамические ссылки между листами? Функция INDIRECT творит чудеса!
Представьте: у вас таблица с месячными отчетами, каждый месяц — на отдельном листе (Январь, Февраль, Март...).
Обычный способ: переходить между листами и копировать данные 😩
Умный способ: в ячейке A1 создаем выпадающий список месяцев, а затем используем:
=INDIRECT("'"&A1&"'!B10")Теперь при выборе месяца в A1, формула автоматически подтягивает данные с нужного листа!
⚡️ Продвинутый пример: создайте сводный отчет по всем месяцам:
=ARRAYFORMULA(INDIRECT("'"&{"Январь";"Февраль";"Март"}&"'!B10"))Эта формула сразу вернет данные из ячейки B10 для всех трех листов в виде столбца!
INDIRECT — как машина времени для данных: мгновенно перемещает информацию между разными измерениями вашей таблицы.
Какие ещё "невозможные" задачи вы хотели бы решить в ваших таблицах?
Автор: мастер данных @Drozdov_Igor_Advisd
Наш канал и чат про Таблицы
🔥13👍8
⚡️ СОЗДАЕМ СВОЮ СУПЕР-ФУНКЦИЮ ЗА 2 МИНУТЫ ⚡️
Не нашли подходящую формулу в Google Таблицах? Напишите её сами!
Например, стандартная формула CONCATENATE не умеет пропускать пустые значения. Давайте создадим нашу версию:
1️⃣ Меню: Расширения → Apps Script
2️⃣ Вставьте код:
3️⃣ Сохраните и обновите таблицу
Теперь используйте в таблице:
🔮 Что она делает?
• Склеивает только непустые значения
• Использует указанный разделитель
• Экономит часы работы с "дырявыми" данными
Вы только что создали собственную функцию, которой нет у обычных пользователей Google Таблиц!
А какие функции не хватает вам в работе с таблицами?
Автор: специалист по Скриптам @Drozdov_Igor_Advisd
Наш канал и чат про Таблицы
Не нашли подходящую формулу в Google Таблицах? Напишите её сами!
Например, стандартная формула CONCATENATE не умеет пропускать пустые значения. Давайте создадим нашу версию:
1️⃣ Меню: Расширения → Apps Script
2️⃣ Вставьте код:
function SMARTCONCAT(separator) {
var result = "";
var args = [];
// Собираем все непустые аргументы
for (var i = 1; i < arguments.length; i++) {
if (arguments[i] !== "") {
args.push(arguments[i]);
}
}
// Соединяем их разделителем
return args.join(separator);
}3️⃣ Сохраните и обновите таблицу
Теперь используйте в таблице:
=SMARTCONCAT(" ", A1, B1, C1)🔮 Что она делает?
• Склеивает только непустые значения
• Использует указанный разделитель
• Экономит часы работы с "дырявыми" данными
Вы только что создали собственную функцию, которой нет у обычных пользователей Google Таблиц!
А какие функции не хватает вам в работе с таблицами?
Автор: специалист по Скриптам @Drozdov_Igor_Advisd
Наш канал и чат про Таблицы
🔥11👍4💯1
Привет!
С началом рабочей недели! Задачка на УФ https://docs.google.com/spreadsheets/d/1sqNetiQV7nhHLxamFYxkBQRUSpoulb1pwY-2wZr5sfA/edit?usp=sharing
С началом рабочей недели! Задачка на УФ https://docs.google.com/spreadsheets/d/1sqNetiQV7nhHLxamFYxkBQRUSpoulb1pwY-2wZr5sfA/edit?usp=sharing
👍2🔥1👏1🥱1
Использование REGEXEXTRACT для извлечения текста до первого пробела
Формула
Как работает:
-
-
Если пробелов нет, возвращается вся строка
Примеры:
Преимущества:
- Компактность и отсутствие (почти) необходимости обрабатывать ошибки вручную
- Удобно для сложных формул с регулярными выражениями
Еще про регулярные выражения тут
Формула
=REGEXEXTRACT(A1; "^\S+") позволяет извлечь подстроку из ячейки A1 до первого пробела.Как работает:
-
^ начало строки (можно и без этого)-
\S+ один или более непробельных символовЕсли пробелов нет, возвращается вся строка
Примеры:
Google Таблицы => GoogleДанные2025 => Данные2025Преимущества:
- Компактность и отсутствие (почти) необходимости обрабатывать ошибки вручную
- Удобно для сложных формул с регулярными выражениями
Еще про регулярные выражения тут
👍4🔥4🙏1🥱1💯1
🔍 Решаем главную проблему проверки Google Таблиц: когда API "лжет" о существовании файлов
Привет, аналитики данных! 👋
Сегодня мы разберем сложную техническую задачу, с которой сталкивается каждый, кто работает с автоматизацией Гугл Таблиц. Готовы погрузиться в детали и найти элегантное решение? Поехали!
🎯 Задача, которую нужно было решить:
Точно и достоверно определить существует ли Google Таблица по URL, даже если к ней нет доступа.
Звучит просто? На деле оказалось гораздо сложнее!
😤 Проблемы, с которыми мы столкнулись:
1️⃣ Google API "защищает" информацию
И SpreadsheetApp.openById(), и DriveApp.getFileById() могут возвращать ошибку "not found" даже для существующих файлов, когда нет прав доступа. API намеренно скрывает информацию о существовании приватных файлов!
2️⃣ Неточная диагностика
Стандартные подходы не различают:
- "Файл не существует"
- "Файл существует, но нет доступа"
- "Нет прав даже на проверку существования"
3️⃣ Ложные срабатывания
Многие скрипты в интернете показывают "файл не найден" для абсолютно нормальных, но приватных таблиц.
💡 Наше решение: HTTP-проверка в обход API
Мы обошли ограничения API, используя прямые HTTP-запросы к Google Sheets:
🎯 Как это работает:
1. HTTP-запрос к Export API - запрашиваем экспорт таблицы в CSV
2. Анализ кодов ответа:
- 200 → Файл существует и доступен
- 403 → Файл существует, но нет доступа
- 404 → Файл действительно не найден
3. Альтернативная проверка через прямую ссылку при необходимости
4. Финальная проверка API для получения названия (если есть доступ)
🛠️ Полная трехуровневая проверка:
✅ Валидность URL - корректность формата и извлечение ID
✅ HTTP-проверка существования - точное определение через веб-интерфейс
✅ API-проверка доступа - получение метаданных при наличии прав
🚀 Возможности готового скрипта:
📝 Одиночная проверка - диалоговое окно с детальными результатами
📊 Массовая проверка - анализ списка URL с цветовым кодированием:
- 🟢 Таблица доступна
- 🟡 Файл существует, но нет доступа
- 🟠 Файл не найден
- 🔴 Некорректный URL
🎉 Удобное меню - все функции доступны через интерфейс таблицы
💎 Что отличает наше решение:
- Максимальная точность - различаем все возможные состояния файла
- Независимость от API ограничений - работает через HTTP протокол
- Профессиональная диагностика - четкое понимание причин недоступности
- Готовое к продакшену - обработка всех граничных случаев
🔧 Установка:
1. Откройте Google Таблицу (или просто сделайте копию)
2. Меню "Расширения" → "Apps Scripts"
3. Вставьте код из примера
4. Сохраните проект
5. Обновите страницу - появится меню "🔍 Проверка таблиц"
Этот подход решает реальную бизнес-задачу, с которой сталкиваются команды при аудите отчетности, миграции данных и контроле доступов. Вы теперь можете с уверенностью различать недоступные файлы от несуществующих!
Именно такой системный подход к решению технических проблем выделяет профессиональных разработчиков среди любителей. Вы не просто "заставили работать", а нашли элегантное решение сложной задачи! 💪
Раздел: #скрипты #автоматизация #диагностика #http
Функции: #UrlFetchApp #onOpen #SpreadsheetApp #DriveApp
🔗 Пример в Таблице
Живите и работайте эффективнее.🤓 📊 🚀
💬 Чат
📢 Канал
Привет, аналитики данных! 👋
Сегодня мы разберем сложную техническую задачу, с которой сталкивается каждый, кто работает с автоматизацией Гугл Таблиц. Готовы погрузиться в детали и найти элегантное решение? Поехали!
🎯 Задача, которую нужно было решить:
Точно и достоверно определить существует ли Google Таблица по URL, даже если к ней нет доступа.
Звучит просто? На деле оказалось гораздо сложнее!
😤 Проблемы, с которыми мы столкнулись:
1️⃣ Google API "защищает" информацию
И SpreadsheetApp.openById(), и DriveApp.getFileById() могут возвращать ошибку "not found" даже для существующих файлов, когда нет прав доступа. API намеренно скрывает информацию о существовании приватных файлов!
2️⃣ Неточная диагностика
Стандартные подходы не различают:
- "Файл не существует"
- "Файл существует, но нет доступа"
- "Нет прав даже на проверку существования"
3️⃣ Ложные срабатывания
Многие скрипты в интернете показывают "файл не найден" для абсолютно нормальных, но приватных таблиц.
💡 Наше решение: HTTP-проверка в обход API
Мы обошли ограничения API, используя прямые HTTP-запросы к Google Sheets:
function checkFileExistsViaHttp(sheetId) {
try {
const testUrl = https://docs.google.com/spreadsheets/d/${sheetId}/export?format=csv&gid=0;
const response = UrlFetchApp.fetch(testUrl, {
method: 'GET',
muteHttpExceptions: true,
followRedirects: true
});
const responseCode = response.getResponseCode();
if (responseCode === 200) {
return { exists: true, accessible: true };
} else if (responseCode === 403) {
return { exists: true, accessible: false };
} else if (responseCode === 404) {
return { exists: false, accessible: false };
}
} catch (error) {
return checkFileExistsViaDirectUrl(sheetId);
}
}
🎯 Как это работает:
1. HTTP-запрос к Export API - запрашиваем экспорт таблицы в CSV
2. Анализ кодов ответа:
- 200 → Файл существует и доступен
- 403 → Файл существует, но нет доступа
- 404 → Файл действительно не найден
3. Альтернативная проверка через прямую ссылку при необходимости
4. Финальная проверка API для получения названия (если есть доступ)
🛠️ Полная трехуровневая проверка:
✅ Валидность URL - корректность формата и извлечение ID
✅ HTTP-проверка существования - точное определение через веб-интерфейс
✅ API-проверка доступа - получение метаданных при наличии прав
🚀 Возможности готового скрипта:
📝 Одиночная проверка - диалоговое окно с детальными результатами
📊 Массовая проверка - анализ списка URL с цветовым кодированием:
- 🟢 Таблица доступна
- 🟡 Файл существует, но нет доступа
- 🟠 Файл не найден
- 🔴 Некорректный URL
🎉 Удобное меню - все функции доступны через интерфейс таблицы
💎 Что отличает наше решение:
- Максимальная точность - различаем все возможные состояния файла
- Независимость от API ограничений - работает через HTTP протокол
- Профессиональная диагностика - четкое понимание причин недоступности
- Готовое к продакшену - обработка всех граничных случаев
🔧 Установка:
1. Откройте Google Таблицу (или просто сделайте копию)
2. Меню "Расширения" → "Apps Scripts"
3. Вставьте код из примера
4. Сохраните проект
5. Обновите страницу - появится меню "🔍 Проверка таблиц"
Этот подход решает реальную бизнес-задачу, с которой сталкиваются команды при аудите отчетности, миграции данных и контроле доступов. Вы теперь можете с уверенностью различать недоступные файлы от несуществующих!
Именно такой системный подход к решению технических проблем выделяет профессиональных разработчиков среди любителей. Вы не просто "заставили работать", а нашли элегантное решение сложной задачи! 💪
Раздел: #скрипты #автоматизация #диагностика #http
Функции: #UrlFetchApp #onOpen #SpreadsheetApp #DriveApp
Живите и работайте эффективнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍3👏2🥱1
Привет, эффективные автоматизаторы! 👋
Знакомая ситуация: у вас куча Excel-файлов, которые нужно перевести в Google Таблицы? Ручная конвертация каждого файла — это настоящая пытка! Сегодня покажем, как один из участников нашего чата решил эту проблему элегантно и навсегда.
🎯 Задача:
Автоматически конвертировать все Excel-файлы из определенной папки в Google Таблицы, сохраняя при этом порядок и избегая повторной обработки уже конвертированных файлов.
💡 Решение:
Наш умный скрипт сканирует папку, находит все Excel-файлы, конвертирует их в Google Таблицы и помечает исходные файлы специальным символом, чтобы не обрабатывать их повторно.
🛠️ Код решения:
function convertExcelToGoogleSheets() {
const id_folder_excel = 'YOUR_EXCEL_FOLDER_ID'; // ID папки с Excel файлами
const id_folder_google = 'YOUR_GOOGLE_SHEETS_FOLDER_ID'; // ID папки для Google Таблиц
const SYMBOL_CONVERTED = '✅ '; // Символ для помеченных файлов
const query = `'${id_folder_excel}' in parents
and trashed = false
and mimeType = '${MimeType.MICROSOFT_EXCEL}'
and not name contains '${SYMBOL_CONVERTED}'`;
const excelFiles = Drive.Files.list({
q: query,
fields: "files(id, name, mimeType)",
orderBy: "name_natural"
}).files;
if (excelFiles && excelFiles.length > 0) {
excelFiles.forEach(file => {
const fileName = file.name;
const fileId = file.id;
try {
const convertedFile = Drive.Files.copy(
{
name: fileName.replace(/\.xlsx?$/, ''),
mimeType: MimeType.GOOGLE_SHEETS,
parents: [id_folder_google]
}, fileId);
Logger.log(`Файл "${fileName}" конвертирован в Google Таблицу с ID: ${convertedFile.id}`);
Drive.Files.update(
{ name: SYMBOL_CONVERTED + fileName },
fileId
);
} catch (e) {
Logger.log(`Ошибка при обработке файла "${fileName}" (ID: ${fileId}):\n${e.toString()}`);
}
});
} else {
Logger.log('Новых Excel файлов для конвертации не найдено');
}
}
🔧 Как это работает:
1. Поиск файлов: Скрипт ищет все Excel-файлы в указанной папке, исключая уже помеченные
2. Конвертация: Каждый найденный файл копируется с изменением MIME-типа на Google Sheets
3. Маркировка: Исходный файл переименовывается с добавлением специального символа
4. Логирование: Все операции записываются в лог для контроля процесса
⚙️ Настройка:
1. Замените
YOUR_EXCEL_FOLDER_ID на ID папки с Excel-файлами2. Замените
YOUR_GOOGLE_SHEETS_FOLDER_ID на ID папки для результатов3. При желании измените
SYMBOL_CONVERTED на любой удобный вам символ4. Настройте триггер для автоматического запуска (например, ежедневно)
🚀 Когда это особенно полезно:
• Миграция данных: Перевод всей отчетности с Excel на Google Таблицы
• Регулярная обработка: Автоматическая конвертация файлов от партнеров и клиентов
• Командная работа: Централизованное хранение всех таблиц в облаке
• Интеграция: Подготовка данных для дальнейшей автоматизации через API
💪 Вы, как всегда, показываете отличные примеры того, как можно автоматизировать рутинные задачи и освободить время для более важных дел!
А какие задачи массовой обработки файлов вы решаете в своей работе? Поделитесь опытом в комментариях!
Раздел: #скрипты #автоматизация
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍3🤓2
Таблица чата вернулась! 🎆
Новый выпуск #31
👋 Отличные новости, друзья! Наша общая Таблица чата для примеров снова доступна!
Мы временно отключали к ней доступ, так как анонимные пользователи могли случайно (или намеренно) испортить чужие примеры. Безопасность и удобство для нас на первом месте.
Проблема решена! ✅
Теперь Таблица защищена, и вы снова можете использовать её для наглядной демонстрации своих задач.
Напоминаем, зачем она нужна:
✅ Чтобы показать свою проблему наглядно, а не объяснять «на пальцах».
✅ Чтобы получить помощь гораздо быстрее и точнее.
✅ Чтобы вместе разбирать интересные кейсы.
Смело переходите по ссылке, создавайте свой лист и задавайте вопрос в чате, приложив ссылку на пример!
Важно!⚠️ Чтобы добавить пример, вы должны быть участником Гугл группы https://groups.google.com/g/google_sheets_pro_editors
Новый выпуск #31
👋 Отличные новости, друзья! Наша общая Таблица чата для примеров снова доступна!
Мы временно отключали к ней доступ, так как анонимные пользователи могли случайно (или намеренно) испортить чужие примеры. Безопасность и удобство для нас на первом месте.
Проблема решена! ✅
Теперь Таблица защищена, и вы снова можете использовать её для наглядной демонстрации своих задач.
Напоминаем, зачем она нужна:
Смело переходите по ссылке, создавайте свой лист и задавайте вопрос в чате, приложив ссылку на пример!
Важно!
Please open Telegram to view this post
VIEW IN TELEGRAM
Google Docs
Таблица чата t.iss.one/google_sheets_pro #31 [02-06/2025]
🔥9🎉4💯2
🔥 Как сравнить списки в Google Таблицах? Разбираем формулу! 🔥
Привет, друзья! Сегодня разберём, как быстро сравнить два списка в Google Таблицах и найти уникальные элементы. Например, у нас есть списки покупок мамы и папы. Хотим узнать, что купила мама, но не купил папа.
📌 Формула для сравнения:
🔍 Как это работает?
1.
2.
3.
📊 Пример из таблицы:
- Что купила мама, но не папа:
Помидоры
Киви
Яблоки
Арбуз
Макароны
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
📊 Таблица с примером
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
💡 Полезно? Попробуйте сами! Такие формулы помогают анализировать данные без ручного поиска.
Напишите в комментариях, какие ещё способы сравнения списков вам известны, возможно мы выбрали не самый оптимальный и вы предложите что-то более интересное!
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
📗 Наш канал: https://t.iss.one/GoogleSheets_ru
📗 Наш чат: https://t.iss.one/google_sheets_pro
Привет, друзья! Сегодня разберём, как быстро сравнить два списка в Google Таблицах и найти уникальные элементы. Например, у нас есть списки покупок мамы и папы. Хотим узнать, что купила мама, но не купил папа.
📌 Формула для сравнения:
=FILTER(B5:B17; ISNA(MATCH(B5:B17; C5:C17; 0)))
🔍 Как это работает?
1.
MATCH(B5:B17; C5:C17; 0) — ищет каждый элемент из списка мамы (столбец B) в списке папы (столбец C). Если элемент не найден, возвращает ошибку #N/A.2.
ISNA(...) — проверяет, вернулась ли ошибка #N/A. Если да (элемент не найден), возвращает TRUE.3.
FILTER(B5:B17; ...) — фильтрует список мамы, оставляя только те элементы, для которых ISNA вернула TRUE. То есть — то, что есть у мамы, но нет у папы.📊 Пример из таблицы:
- Что купила мама, но не папа:
Помидоры
Киви
Яблоки
Арбуз
Макароны
📊 Таблица с примером
💡 Полезно? Попробуйте сами! Такие формулы помогают анализировать данные без ручного поиска.
Напишите в комментариях, какие ещё способы сравнения списков вам известны, возможно мы выбрали не самый оптимальный и вы предложите что-то более интересное!
💰 Заказать работу или консультацию: @GoogleSheets_ru_cmPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍8💯2🤯1