• Простой вопрос css, html?

    @qpz
    Всё из-за этого:
    * {
        background-color: gray;
    }


    Фон любого элемента будет окрашен в gray, если в стилях не будет указано иное.
    Ответ написан
    1 комментарий
  • Простой вопрос css, html?

    SvyatoslavLP
    @SvyatoslavLP
    Изучаю верстку
    Не футера, а хедера.
    Ответ написан
    Комментировать
  • Как сократить объявление переменных?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Пользуйтесь массивами.
    Для localstorage конвертируйте массив в JSON и храните как строку
    Ответ написан
    1 комментарий
  • Как создать новый лист и поменять его название в гугл таблице?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Наверное, gspread является неплохим решением, но с появлением Sheets API v4, все стало немного проще.

    spreadsheetId=''
    new_sheet_title=''
    
    from googleapiclient.discovery import build
    service = build('sheets', 'v4')
    
    requests = []
    
    requests.append({
        'addSheet': {
            'properties': {
                'title': new_sheet_title
            }
        }
    })
    
    body = {
        'requests': requests
    }
    
    response = service.spreadsheets().batchUpdate(
      spreadsheetId=spreadsheetId,
      body=body).execute()


    Запустить код "здесь и сейчас" можно по ссылке https://colab.research.google.com/drive/1_IdQAxqk7...
    Ответ написан
    Комментировать
  • Как настроить автоответчик писем на заполнение форм на разных языках?

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

    Главная ошибка - это ссылка на активную Таблицу SpreadsheetApp.getActiveSpreadsheet(); В триггере OnFormSubmit не может быть активной Таблицы, потому что никакой пользователь ее не открыл. А если даже и открыл, то он может не быть регистратором триггера или его инициатором.

    Обработка ошибок
    Google Apps Script (речь о данном моменте времени развития языка) не имеет развитых методов отладки. Поэтому обвяжите основной вызов:
    /**
    * В Таблице должен быть лист "Лог".
    * Чтобы лист существовал всегда
    * https://github.com/oshliaer/google-apps-script-snippets#get-a-sheet-by-name
    **/
    function handler(e) {
      try {
        sendFormByEmail(getNewEmailMessage(e));
      } catch(err) {
        e.source.getSheetByName('Лог').appendRow([new Date(), err.message, err.stack]);
      }
    }

    Отлично, теперь все, что упало в рантайме, будет вам известно.

    Текущая Таблица/Лист
    Я приываю не только автора топика, но вообще всех: "Пожалуйста, не трогайте ActiveSpreadsheet, ActiveSheet и ActiveRange, т.к. это не VBA. Это #ВАЩЕ_НАФИГ_ДРУГАЯ_ВСЕЛЕННАЯ!". Обратите внимание на код выше e.source.getSheetByName(). Это все, что надо.
    А вот пример комутатора:
    /**
    * Определение языка на основе ответа
    **/
    function getNewEmailMessage(e) {
      var sheet = e.range.getSheet();
      var lang = 'EN';
      switch(sheet.getName()){
        case 'RU':
           return 'Ответ на русском';
           break;
        case 'EN':
           return 'Ответ на нерусском';
           break;
      }
      return 'Ответ на русском';
    }

    Осталось добавить аргументов и переписать sendFormByEmail согласно принимаемым параметрам.

    Триггер на несколько Форм

    Вместо заключения
    Только качественный и проверенный контент
    Ответ написан
    4 комментария
  • Система бронирования (резервирования) товаров (заказов) Google spread sheet. Примеры?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Здравствуйте.

    Вот небольшой пример https://youtu.be/9WK1FM2_tDc Таблица https://goo.gl/4u23t7 (необходимо сделать копию)

    Суть в том, чтобы вести запись только в одном листе "История". На "Складе" остатки отображаются через формулу:
    =QUERY('История'!B:E;"select B, C, sum(D) where E=true group by B, C")

    Т.е. если в "Истории" будет запись без TRUE, то ее можно считать "непроведенной".
    Лист "Заказы" служит пояснением для "Истории", возможно, надо как-то расширить связь этих Таблиц, но она все равно будет условной.

    Пояснения к коду. Серверная часть нуждается в LockService, чтобы разрешить очередь записи.
    Можно сделать форму просмотра заказов, с возможностью помечать FALSE в "Истории". Может быть даже "Редактировать", но лучше по-моему, делать копию и записывать новый заказ, помечая прежний как FALSE. Также необходимо продумать регламент, т.к. Таблицы "нерезиновые" и необходимо максимально часто переносить остатки.

    Пояснения к концепту. Ваше представление, которое приведено выше, вряд ли подойдет для реализации в Таблицах, уже только потому, что никаких идентификаторов строк, и тем более связей между Таблицами, не существует. Я предлагаю вообще ничего не удалять. Лучше делать "перенос остатков" и прочих параметров в новые Таблицы (или наоборот), чтобы иметь более полноценную картину действий.

    Пожалуйста, измените теги в топике на Google script и Spreadsheets. При текущем теге ответ на вопрос должен быть примерно таким https://www.google.com/enterprise/marketplace/sear...
    Ответ написан