Ответы пользователя по тегу Google Apps Script
  • Как создать выпадающий список через DataValidationBuilder с диапазоном данных в относительных ссылках?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Програмно этого сделать нельзя. Покрайней мере на данный момент.
    Ответ написан
    Комментировать
  • Как получить ответы на свою форму для формирования статистики?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Вы можете программно сгенерировать нужные ответы. Apps Script для этого подойдет.
    Ответ написан
    Комментировать
  • Как подключиться к базе данных?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Apps Script поддерживает только HTTP и JDBC, что логично. Вы должны создать сервис-прослойку, который будет взаимодействовать со Скриптами по HTTP.
    Ответ написан
    Комментировать
  • Как сделать текст жирным при конкатенации строк?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Вы не можете этого сделать, если объединение строк будет через формулу. Тут накладывается ограничение - объединять только через скрипт.

    Вот рабочий код на Google Apps Script

    /* exported combineCells */
    /**
     * Combines strings from two cells in a row into a single cell.
     * The combined string is bolded if the first cell is not empty.
     */
    function combineCells() {
      const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      const sheet = spreadsheet.getSheetByName('Соединение строк построчно');
      const dataRange = sheet.getDataRange();
      const values = dataRange.getValues();
    
      const newValues = values.map((row) => {
        const cellA = row[0];
        const cellB = row[1];
    
        let formattedText = null;
        if (String(cellA).length > 0) {
          formattedText = SpreadsheetApp.newRichTextValue()
            .setText(String(cellA) + ' ' + String(cellB))
            .setTextStyle(0, String(cellA).length, SpreadsheetApp.newTextStyle().setBold(true).build());
        } else {
          formattedText = SpreadsheetApp.newRichTextValue().setText(String(cellB));
        }
    
        return [formattedText?.build()];
      });
    
      const targetRange = dataRange.offset(0, 2, dataRange.getNumRows(), 1);
      targetRange.setRichTextValues(newValues);
    }


    Пример в Таблице https://docs.google.com/spreadsheets/d/1qdh4mQLiEL...
    Как запускать Скрипты https://googlesheets.ru/script-editor-guide/
    Ответ написан
    Комментировать
  • Почему после переноса на корпоратиный google-disk перестали работать развертывания apps scripts?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Это проблема развертывания приложения. Обратитесь к поддержке.
    Ответ написан
    Комментировать
  • Как настроить проставление даты при изменении соседней ячейки в Google Sheets?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Скрипт для вставки даты и времени при редактировании ячейки в Google Таблицах

    Задача:
    Иногда возникает необходимость автоматически записывать дату и время внесения изменений в определенные ячейки. Это может быть полезно для отслеживания активности, ведения журналов изменений и обеспечения контроля над обновлениями данных.

    Когда это полезно:
    1. Отслеживание изменений: Ведение журнала изменений данных для аудита или анализа.
    2. Контроль сроков выполнения: Отслеживание времени выполнения задач или обновлений информации.
    3. Повышение прозрачности: Учет времени и даты изменений для повышения прозрачности и ответственности сотрудников.

    Решение:
    Для автоматического добавления даты и времени при редактировании ячеек используем скрипт Google Apps Script.

    /**
     * Триггер события EDIT
     *
     * @param {GoogleAppsScript.Events.SheetsOnEdit} e
     */
    function onEdit(e){
      // Определяем имя листа, на котором обрабатываем событие редактирования ячейки
      const watchingSheet = 'Добавить дату в строке при изменении ячейки';
      // Определяем индекс столбца в котором обрабатываем событие редактирования ячейки 
      const watchingColIndex = 6;
      // Определяем индекс столбца в который будем записывать дату/время 
      const targetColIndex = 8;
      // Из объекта события получаем измененный диапазон и из диапазона лист, на котором он расположен
      const sheet = e.range.getSheet();
    
      // Проверяем, что имя листа, на котором произошло событие соответствует указанному в переменной `targetSheetName`
      if (sheet.getName() !== watchingSheet) {
        // И, если событие произошло на другом листе, то прекращаем выполнение функции
        return;
      }
    
      // Определяем индекс столбца в котором произошло событие
      const column = e.range.getColumn();
      // Проверяем, в нужном ли столбце произошло событие
      // и соответствует ли новое значение нужному нам
      // проверку на значение можно убрать
    
      // для этого нужно удалить этот фрагмент: "&& e.value === 'Готово'"
      if (column == watchingColIndex && e.value === 'Готово') {
        // Устанавливаем дату и время в ячейку на пересечении строки, в которой было изменение
        // и столбца, указанного в переменной `targetColIndex` 
        e.source.getActiveSheet().getRange(e.range.getRow(), targetColIndex).setValue(new Date());
      }
    }


    Пример тут https://docs.google.com/spreadsheets/d/1IHDKe-5Tzv...

    Оригинал тут https://t.me/GoogleSheets_ru/213
    Ответ написан
    Комментировать
  • Как автоматически переносить данные из одного листа на другой ячейки определенного цвета?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    К сожалению, это задание, а не вопрос. Вы можете использовать Google Apps Script для решения этой задачи. На самом деле, эта задача может быть решена очень красивым способом, если вам подойдет вывод в виде формулы:

    1. Необходимо создать пользовательскую функцию
    2. Функция смотрит, на каком листе она находится
    3. На основании параметров цветов функция вытягивает нужные данные из источника


    Пожалуйста, не нарушайте правила! Заказывайте работы на Фрилансим
    Ответ написан
    Комментировать
  • Как осуществить скрапинг данных steam баланса и суммы инвентаря?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Используйте для этого доступные интерфейсы Steam.
    Ответ написан
    Комментировать
  • Как извлечь ссылку на файл из чипа?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Экспортируйте файл в XLSX, распакуйте его и распарсите. Получите ссылки на файлы. Не очень удобно, но возможно.
    Ответ написан
    2 комментария
  • Как свести учет рабочего времени, если данные из Ардуино?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Когда данные вставляются перед или после диапазона формул, то формула будет смещаться. Чтобы избежать такой ситуации, необходимо заменить ссылку на диапазон на результат формулы INDIRECT

    =MAXIFS(
      INDIRECT("Sheet1!$B$2:$B"),
      INDIRECT("Sheet1!$C$2:$C"), "=863705125",
      INDIRECT("Sheet1!$A$2:$A"), "=7/1/2024"
    )
    Ответ написан
    1 комментарий
  • Что означает ошибка TypeError: Cannot read properties of undefined (reading 'match')?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Эта ошибка означает то, что переменная, для которой вы хотите применить метод match является undefined

    На самом деле код вполне рабочий

    667e8ce901b8d123359329.gif

    Пример в Таблице https://docs.google.com/spreadsheets/d/11zQ949jIwe...

    Код в проекте под именем того же листа.
    Ответ написан
    Комментировать
  • Как копировать много строк?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    ss2.getRange(lr + 1, 1, values.length, values[0].length).setValues(values);


    Неужели так сложно было вставить код?
    Ответ написан
    6 комментариев
  • Как получить адрес нужной мне ячейки в буквенном формате?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Ответ выше неполный и может привести к проблемам при массовой обработке данных. ChatGPT точно такого не сделает, потому что не знает, а пользователь не может сформулировать.

    Способ первый, это вычисление имени колонки по номеру колонки

    function base26ABCfrom10_(number) {
      let num = number;
      let sfx = '';
      while (num > 0) {
        const cd = (num - 1) % 26;
        sfx = String.fromCharCode(65 + cd) + sfx;
        num = Math.floor((num - cd) / 26);
      }
      return sfx;
    }


    Второй способ, это получение координат диапазона. Этот метод как раз может быть с тормозами

    6666fe9535aa8106659507.png

    Пример в Таблице https://docs.google.com/spreadsheets/d/11zQ949jIwe...
    Ответ написан
    2 комментария
  • Как сделать Минутомер?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Это задание, а не вопрос. Задания отправляют сюда https://freelance.habr.com/

    Ваша задача решается с использованием триггера на редактирование и правильной расстановкой условий.
    Ответ написан
    1 комментарий
  • Можно ли изменить значение или формат в зависимости от того, кто заполнил ячейку?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Это возможно сделать только программно. Причем эксплуатация событий для обычного акаунта ограничена, и возможность определения пользователя сведена на нет.

    Для Скриптов в Google Workspace среде это возможно без ограничений.
    Ответ написан
    Комментировать
  • Сокрытие строки при нуле в какой-либо ее ячейке?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Это возможно сделать, используя Google Apps Script или другую программу, эксплуатирующую Google Sheets API.
    Ответ написан
    Комментировать
  • Как пропустить ошибку, если при создании листа копированием такой лист уже есть?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Вам нужно проверить, есть ли такой лист перед установкой имени

    Добавить со случайным именем:

    const nameTo = ss.getSheetByName(name) ? `${name}_${new Date().getTime()}` :  name;
    sheetTemp.setName(nameTo);


    Удалить перед вставкой нового:

    if(ss.getSheetByName(name)) {
      ss.deleteSheet(name);
    }


    Просто пропустить, ничего не делать:

    if(!ss.getSheetByName(name)) {
      sheetTemp.setName(name);
    }
    Ответ написан
    Комментировать
  • Можно ли парсить дискорд через гугл апп скрипт?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Если скрапить, то ничего толком сделать нельзя. Если через API, то пожалуйста.

    Как проверить, может ли Apps Script скрапить URL https://t.me/gasru/470
    Ответ написан
    Комментировать
  • Как получить ники тех, кто вносит изменения в Таблицу?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Вы можете сделать это с помощью следующих мтодов

    Session.getActiveUser();
    Session.getEffectiveUser();


    Это работает только для доменов при запуске Скрипта в среде Google Workspace
    Ответ написан
    Комментировать
  • Есть ли у Google forms АПИ?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    1. Решается штатными средствами - см. Как отправить форму с предварительно заполненными ...
    2. Этого сделать нельзя


    Apps Script вам не поможет - это для внутрненней кухни.
    Ответ написан
    Комментировать