Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
oshliaer

Alexander Ivanov

Google Products Expert
  • 410
    вклад
  • 0
    вопросов
  • 517
    ответов
  • 58%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Как решить ошибку "TypeError: Cannot read property 'getRange' of undefined"?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Решение этой проблемы заключается в точном определении, какую Таблицу использует скрипт. На данный момент этой ошибки не существует, но, все равно, по возможности, лучше указывать, какую именно Таблицу использовать, поэтому нужно удалить упоминания об активной Таблице/листе и указать точные сущности через

    SpreadsheetApp.openById()
    book.getSheetByName()
    sheet.getRange()

    и т.п.
    Ответ написан 11 часов назад
    Комментировать
    Комментировать
  • Как исправить ошибку "Exception: Сервису "Таблицы" недоступен документ ABCD1234"?

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

    Немного подробнее в комментарии https://qna.habr.com/q/983611#clarification_1227067
    Ответ написан 11 часов назад
    Комментировать
    Комментировать
  • Почему ошибка при скачивании файла с Google Drive скриптом?

    oshliaer
    Alexander Ivanov @oshliaer
    Google Products Expert
    Files: export используется только для файлов формата Google Workspace. Обратите внимание, что Таблицы и файлы Excel могут быть похожи при отображении как значков так и в самом приложении, но являются разными. Например, Excel не поддерживают некоторые формулы, не отвечают на запросы формулы IMPORTRANGE и не экспортируются. Тоже самое и в отношении Документов и Слайдов.
    Ответ написан 27 июн.
    Комментировать
    Комментировать
  • Как достать значение параметра из ответа API?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Скорее всего, вам нужно сделать вот это
    const data = JSON.parse(response.getContentText());


    function myFunction() {
      const response = UrlFetchApp.fetch("https://suppliers-api.wildberries.ru/api/v2/stocks...", options);
      const data = JSON.parse(response.getContentText());
      console.log(data);
      /**
        {
         "stocks":[
            {
               "subject":"Брюки",
               "brand":"R.O.S.E.",
               "name":"Брюки",
               "size":"42",
               "barcode":"2036686215443",
               "article":"292022",
               "warehouseName":"Брест",
               "barcodes":[
                  "2036686215443"
               ],
               "stock":0,
               "warehouseId":198679,
               "id":145904543,
               "chrtId":145904543,
               "nmId":90612284
            }
         ],
         "total":1
        }
      */
      console.log(data.stocks[0]);
      /**
        {
            "subject":"Брюки",
            "brand":"R.O.S.E.",
            "name":"Брюки",
            "size":"42",
            "barcode":"2036686215443",
            "article":"292022",
            "warehouseName":"Брест",
            "barcodes":[
              "2036686215443"
            ],
            "stock":0,
            "warehouseId":198679,
            "id":145904543,
            "chrtId":145904543,
            "nmId":90612284
        }
       */
    }
    Ответ написан 27 июн.
    Комментировать
    Комментировать
  • Как соединить и заставить работать COUNTIF и ARRAYFORMULA?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Возможно,

    =QUERY(
      FILTER(B4:B;MATCH(A4:A;D4:D;0));
      "select Col1, count(Col1) group by Col1 label Col1'ФИО',count(Col1)'Количество за период'";
      0
    )


    62b988b6d887f937232314.png

    Или

    =ARRAYFORMULA(COUNTIF(FILTER(B4:B;MATCH(A4:A;D4:D6;0));G4:G6))


    62b99f9d23fc3449020648.png
    Ответ написан 27 июн.
    3 комментария
    3 комментария
  • Как произвести замену текста (из массива) формулой?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Пример в Таблице https://docs.google.com/spreadsheets/d/1cfF88hVRfM...

    Не самая понятная формула, но работает на весь массив сразу

    =INDEX(IFERROR(VLOOKUP(
      ROW(A2:A25);
      SPLIT(FLATTEN(IF(
        REGEXMATCH(A2:A25;TRANSPOSE(B2:B25));
        ROW(A2:A25) & "❤" & REGEXREPLACE(A2:A25;TRANSPOSE(B2:B25);TRANSPOSE(C2:C25));
      ));"❤");
      2;
    );A2:A25))


    Обратите внимание, что мы поставляем регулярное выражение в качестве запроса поиска для замены.

    62b1eaceb29f1573849208.png
    Ответ написан 21 июн.
    2 комментария
    2 комментария
  • Как преобразовать данные через формулу?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Эту задачу можно вообще одной формулой решить

    =ARRAYFORMULA(IFNA(
      VLOOKUP(
        B9:B29;
        QUERY(
          FILTER({DATEVALUE(statistics_voximplant!B:B)\--IFERROR(REGEXEXTRACT(statistics_voximplant!C:C;"(.*?)\.");0)};statistics_voximplant!A:A=J1);
          "select Col1, sum(Col2)/86400 group by Col1";
        0);
        2;0);0
    ))


    62b02a57c0d11734216562.png
    Ответ написан 20 июн.
    5 комментариев
    5 комментариев
  • Как сделать так, чтобы копировалась ячейка при изменении ячейки?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Без конкретного примера Таблицы ваш вопрос звучит как задача. Вот прмиер скрипта, который решает подобную проблему https://qna.habr.com/q/1165910

    Единственное, что вам нужно, это добавить проверку, есть ли в строке упоминание бригады.

    Опять же, без нормального примера, вам придется все делать самому.
    Ответ написан 20 июн.
    7 комментариев
    7 комментариев
  • Почему программа обрезает часть RSS ленты?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Решением является код из этого топика https://qna.habr.com/q/1165902
    Ответ написан 16 июн.
    1 комментарий
    1 комментарий
  • Возможно ли копирование форматирования при вставке новой строки?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Sheets
    Google Products Expert
    К сожалению, это старый известный баг. Вам нужно иметь минимум две строки, чтобы сохранить форматирование границ.

    В следующем случае, если вы вставите строки выше второй строки, то форматирование границ останется:
    62ab336c3b5dc010655101.png

    Вот как-то так.
    Ответ написан 16 июн.
    Комментировать
    Комментировать
  • Как реализовать суммирование при вводе данных пользователем?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Пример в Таблице https://docs.google.com/spreadsheets/d/1RDXA0-Nli_...

    Ну, можете попробовать вот такой простой скрипт

    function onEdit(e) {
      const range = e.range;
      const sheet = range.getSheet();
      const sheetName = sheet.getName();
      const row = range.getRow();
      const column = range.getColumn();
      if (sheetName === 'Лист4' && column === 21 && row > 1) {
        const range2 = range.offset(0, 1);
        const value2 = range2.getValue();
        range2.setValue(+value2 + +e.value);
        range.setValue(null);
      }
    }
    Ответ написан 15 июн.
    1 комментарий
    1 комментарий
  • Как связать Гугл таблицу и Access?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Скорее всего необходимо связать данные через формат BDCM. Это такой xml файл, который можно будет скармливать в MS Access. В принципе, Google Apps Script может сделать такой файл. Ну, или python на клиентской машине.

    https://support.microsoft.com/ru-ru/office/use-ext...

    Ну, или через ODBC https://www.youtube.com/watch?v=qOyDrR3h5uI В любом случае, скорее всего пилить надо.
    Ответ написан 14 июн.
    Комментировать
    Комментировать
  • Как подсчитать сумму столбца массива в Google Таблицах?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Необходимо результат вашей функции поместить на вспомогательный лист, а уже из него работать с полученным массивом. Например, вы можете составить такой отчет

    = {
      FILTER('Вспомогательный лист'!A:A;'Вспомогательный лист'!A:A<>"");
      SUM('Вспомогательный лист'!Z:Z;)
    }


    Необязательно все засовывать в одну формулу. Например, IMPORTRANGE.
    Ответ написан 10 июн.
    Комментировать
    Комментировать
  • Почему не работает скрипт при добавлении редактора?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Основная проблема в том, что вы прописали простой триггер, который для редактора может быть недоступен из-за ограничения прав на работу Таблицы. Лучшее решение в данном случае - это зарегистрировать триггер как устанавливаемый и запускать все время от своего имени.
    Ответ написан 10 июн.
    Комментировать
    Комментировать
  • Как сделать отображение Таблицы у всех пользователей одинаковым?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Sheets
    Google Products Expert
    К сожалению, только если открывать браузер как отдельное окно и задавать ему определенные размеры.

    Например, для моей ОС команда запуска для Google Chrome будет

    $> google-chrome --app=https://docs.google.com/spreadsheets --profile-directory=default


    Далее, мне нужно поймать это окно и изменить его размер, для этого у меня есть специальная программа `resize`. Думаю, это как-то можно совместить для всех ваших пользователей.
    Ответ написан 09 июн.
    2 комментария
    2 комментария
  • Как вставить строку по условию Google Apps Script?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Попробуйте это решение https://qna.habr.com/q/1160184#answer_2175980

    Пример добавил в Таблицу в том ответе. Решение, скорее всего

    function run2() {
      const book = SpreadsheetApp.getActiveSpreadsheet();
      const sheet = book.getSheetByName('Пример 2');
      sheet.sort(5);
      const values = sheet.getDataRange().getValues();
      const buffer = {
        value: values[values.length - 1][1]
      };
      values.forEach((_, i, arr) => {
        const j = arr.length - 1 - i;
        const value = arr[j][1];
        if (value !== buffer.value) {
          sheet.insertRowAfter(j + 1);
          buffer.value = value;
        }
      });
    }
    Ответ написан 09 июн.
    1 комментарий
    1 комментарий
  • Как вывести цвета в массив с отбором?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    В комментариях есть ответ Кирьян Пустой с оригинальным решением.

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

    Необходимо отдельно копировать и вставлять цвета и значения

    function copyRange() {
      const book = SpreadsheetApp.getActiveSpreadsheet();
      const sheet = book.getSheetByName('Пример');
      const fromRange = sheet.getRange('A2:C4');
      const fromValues = fromRange.getValues();
      const fromColors = fromRange.getBackgrounds();
      const values = fromValues.filter(([_, __, value]) => value !== 'Закрыт');
      const colors = fromColors.filter((_, i) => fromValues[i][2] !== 'Закрыт');
      const toRange = sheet.getRange(1, 5, values.length, values[0].length);
      sheet.getRange(1, 5, sheet.getLastRow(), 3).clear();
      toRange.setValues(values).setBackgrounds(colors);
    }


    62a215e8ed732479426066.png
    Ответ написан 09 июн.
    2 комментария
    2 комментария
  • Как подтянуть значение элемента ячейки при определенном значении в другой ячейке?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Вариант простой

    Я бы добавил такую формулу

    =ARRAYFORMULA({
      "Пробег выезда";
      IFERROR(VLOOKUP(
        B4:B18;
        {'1'!B4:B18\'1'!F4:F18};
        2;
        0
      ))
    })


    62a20b23d7a20753872131.png

    Вариант сложнее

    Можно добавить справочник "База"

    62a22d415c0bc611193708.png

    А потом уже выбирать авто

    62a22d8e3e141904907924.png

    В этом случае есть некоторые плюсы:
    • Не надо думать об имени листа
    • Не надо думать о текущей дате
    • Можно просто скопировать лист, создавая новый


    Пример в Таблице на листе 2 https://docs.google.com/spreadsheets/d/1eqRjQhROfu...
    Ответ написан 09 июн.
    5 комментариев
    5 комментариев
  • Как конвертировать формат изображений внутри документа Google Docs?

    oshliaer
    Alexander Ivanov @oshliaer
    Google Products Expert
    Скорее всего никак. Сервис сам принимает решения в каком формате сохранять изображения. Зависит от размера и целей оптимизации, которые выбираются автоматически.

    Тут обсуждается техника работы с картинками через Apps Script https://oshliaer.github.io/qna?target=post/how-to-...
    Ответ написан 07 июн.
    Комментировать
    Комментировать
  • Как сортировать ячейки?

    oshliaer
    Alexander Ivanov @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Пример в Таблице https://docs.google.com/spreadsheets/d/1Up40Um17xR...

    Формула не очень симпатичная, но простая

    629ec79b12226428305217.png

    =INDEX(TRANSPOSE(SORT(
      {IFNA(--REGEXEXTRACT(TRANSPOSE(D5:H5);"^\d+");TRANSPOSE(D5:H5))\TRANSPOSE(D5:H5)};
    1;1));2)
    Ответ написан 07 июн.
    6 комментариев
    6 комментариев
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • Следующие →
Самые активные сегодня
  • Drno
    • 16 ответов
    • 1 вопрос
  • mayton2019
    • 7 ответов
    • 0 вопросов
  • sergiks
    Сергей Соколов
    • 5 ответов
    • 0 вопросов
  • ThunderCat
    ThunderCat
    • 5 ответов
    • 0 вопросов
  • Zerg89
    • 4 ответа
    • 0 вопросов
  • CityCat4
    CityCat4
    • 4 ответа
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации