Задать вопрос
  • Как вызвать формулу импорта с сайта с Jsp?

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

    Это называется что-то типа "browser on server".
    По идее, мы должны заставить сервер, загрузить к себе страницу, вызвать все клиентские процедуры, взять контекст и разобрать его, выдать результат в сеть.
    Проблемы:
    • Где взять/запустить/выпросить/настроить сервер обычным смертным?
    • Что!?

    Идея:
    • Организовать часть автоматизации на рабочем месте.
    • Публиковать данные, ака "выдать результат в сеть", на Диске Google.

    По шагам:
    1. Необходимо скачать и распаковать phantomjs.org/download.html Пусть папка с файлом phantomjs.exe называется
      'C:\phantomjs\bin'
    2. Необходимо скачать файл parse_jsp_to_file.js Сохраните его туда же, где лежит файл phantomjs.exe
    3. Необходимо установить Диск для Mac/PC
    4. Необходимо настроить паку на диске для общего доступа (Видно всем в Интернет). Назовем ее FOLDER.
    5. Необходимо, чтобы папка FOLDER синхронизировалась в Диск для Mac/PC. Пусть ее путь будет
      'C:\Диск Google\FOLDER'
    6. Открыть файл parse_jsp_to_file.js текстовым редактором и изменить строку
      var folder = 'C:\\_\\Google Drive\\temp (main)\\(public)\\';

      на строку
      var folder = 'C:\\Диск Google\\FOLDER\\';
      *следите за слэшами. Настройка указана для Windows
    7. Остается запустить командную строку и вставить туда
      'C:\phantomjs\bin\phantomjs.exe parse_jsp_to_file.js'

    8. Если в папке C:\Диск Google\FOLDER появился файл yyyy-mm-dd.xml, то можно идти дальше, иначе - ковырять и проверять.
    9. Необходимо получить ID папки FOLDER на Диске. Это самая длинная комбинация Цифр/Букв в адресе общего доступа.
    10. Необходимо взять формулу IMPORTXML() из файла goo.gl/GUpaf2
    11. Необходимо заменить в этой формуле ID на свой.
    12. Все.

    У меня работает как часы.
    Проблемы:
    • Я не добавлял обработчики исключений.
    • JS файл должен быть в кодировке UTF-8
    • Я добавил BAT файл для своей настройки. Но у меня C:\phantomjs\bin находится в переменных среды.

    Что в итоге:
    • BAT можно настроить на запуск каждый день.
    • Файлы записываются по одному на каждый день.
    • В Таблицах появляется возможность отследить дату изменения контекста.

    P.S.:
    Для множества ссылок, необходимо просто использовать другой скрипт simple_cycle.js. Ему необходимо существование файла file.txt, где описаны параметры, которые должны формировать URL для запроса.
    Результат на листе "Пример с несколькими файлами" goo.gl/GUpaf2.
    Ответ написан
    3 комментария
  • Как получить ссылку на изображение из Google диска по id?

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

    Берут сомнения меня, что CAJA, даже в режиме IFRAME, предоставляет нам DOM-документ. Все же, с большой вероятностью, это некий фарш LIKE_DOM = CAJA(DOM);

    Поэтому инструкция, чтобы в нее не передавали, не будет "responsive":
    document.getElementByTagName('img').src = data.image;

    Но, это же DOM, в конце концов! Создаем элемент, вместо изменения атрибута:
    index.html
    <div>
    	<input type="button" onclick="showImage()" value="Click Me!" />
    	<div id="app"></div>
    </div>
    <script>
    	function showImage() {
    		google.script.run.withSuccessHandler(doStuff).withFailureHandler(function serverFailureHandler(e) {
    			console.log(JSON.stringify(e))
    		}).getImageId();
    	};
    	function doStuff(id) {
    		var img = document.createElement('img');
    		img.src = 'https://drive.google.com/uc?export=download&id=' + id;
    		document.getElementById('app').appendChild(img);
    	};
    </script>

    Code.gs
    function doGet(e){
      return HtmlService.createHtmlOutputFromFile('index');
    }
    function getImageId(){
      return '0BzStSAirQJ2oREZGYnM5MjBUZTQ';
    }

    Заметьте, нет никакой необходимости вызывать DriveApp. Он вам понадобится, только если изображение будет не в общем доступе. Тогда вам придется брать Blob, кодировать его в base64 и передавать слепок. Размер слепка не может превышать 10Мб.

    И еще я заметил у вас
    <?!= include('JavaScript'); ?>
    Не забудьте, что шаблоны не исполняют асинхронного кода Load data asynchronously, not in templates, поэтому, создавая нечто объемное, постарайтесь выдать HTML как можно быстрее:
    function doGet(e){
      return HtmlService.createHtmlOutputFromFile('index');
    }
    Ответ написан
    Комментировать
  • Как сгенерить md5 строку на Google Script?

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

    Мне кажется, что у вас неполные представления о методах Google Apps Script, алгоритмах хэширования и системах исчисления.

    Во-первых, computeDigest возвращает массив Byte[], что он и должен делать.
    Во-вторых, вам просто его надо "преобразовать в 16-ричную хэш строку", как сказано выше.

    Попробуйте сделать так:

    function test(){
      Logger.log(toMD5('56'));
    }
    const toMD5 = function(charset, toByte) {
      charset = charset || Utilities.Charset.UTF_8;
      var digest = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, this, charset);
      if(toByte) return digest;
      var __ = '';
      for (i = 0; i < digest.length; i++) {
        var byte = digest[i];
        if (byte < 0) byte += 256;
        var bStr = byte.toString(16);
        if (bStr.length == 1) bStr = '0' + bStr;
        __ += bStr;
      }
      return __;
    }
    Ответ написан
    Комментировать
  • Как настроить взаимодействие Google Apps и Яндекс.Маркет API?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Основное требование от Яндекс для доступа к API Маркета - это наличие "Партнерского API"- или
    "Контентного API"- ключа доступа в виде oauth_login. Этакий ключ-в-ключе. Рассуждения на тему необходимости, полагаю, неуместны.

    API Маркета
    • Партнерский API Для магазинов, которые размещают товары на Яндекс.Маркете, а также для рекламных агентств.
    • Контентный API Для разработчиков, которым нужны данные о товарах с Маркета: описания моделей, фотографии, отзывы.

    Следует точно определиться с целью задачи. Не знаю, дает ли Яндекс добро на использование данных в масштабах "личного хочу", поэтому, не имея магазина, придется создавать приложение "для всех".

    Опишу вкратце, как использовать API Маркет в Google Apps Script:
    1. Вы должны быть уверены, что у вас есть ваш oauth_login (см. выше)
    2. Пройдите Авторизацию. Для этого ваше приложение должно использовать следующие из возможностей Google Apps Script: HtmlService как опубликованное приложение, HtmlService как возврат StateTokenBuilder, если вы создаете Add-On. Для получения токена и отправки запросов POST (или запросов GET от лица приложения) используйте URLFetch
    3. Следуйте инструкциям Яндекс по Ограничениям для запросов

    Могу добавить только то, что описание API Яндекс и ВКонтакте на данный момент, как мне кажется, являются самыми внятными и, вероятно, прямолинейными. От чего вероятность возникновения ошибок минимальна.

    С уважением.
    Ответ написан
    Комментировать
  • Как правильно переписать формулу Excel для анализа отфильтрованных строк под таблицы Google Docs?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    В Таблицах Google "Фильтр" не соответствует функции "Фильтр" в MS EXCEL. Необходимо изменить техпроцесс.
    Ответ написан
    Комментировать
  • Google Apps и SSO

    oshliaer
    @oshliaer
    Google Products Expert
    Для всех, кто интересуется. Это довольно просто, если настроить.

    Интересно, возможно ли закрыть топик 3х летней давности?
    Ответ написан
    Комментировать
  • Как вернуть старый интерфейс Google Chrome?

    oshliaer
    @oshliaer
    Google Products Expert
    Форсированно включаем new profile management system Mac, Windows, Linux, Chrome OS, Android, чтобы было, не отказываться же от "плюшек".
    Форсированно выключаем the new avatar menu Mac, Windows, Linux, чтобы "все вернулось назад".

    gdriveru.blogspot.com/2015/01/google-chrome-new-pr...
    Ответ написан
    2 комментария
  • Как в гугл таблице сделать формулу поиска двух образцов текста?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Используйте регулярные выражения для сложных операций со строками.
    Для одной ячейки
    =REGEXMATCH(T(A1),"7777|9999")
    Для диапазона
    =ARRAYFORMULA(REGEXMATCH(T(A1:A12),"7777|9999"))
    Если заранее известно, что в диапазоне только текст, то формулу T() можно опустить.

    Пример Как в гугл таблице сделать формулу поиска двух обр...

    Тест регулярного выражения (ссылка)
    4c0deb3728b24ab9a94a6123eb1956ef.png
    Ответ написан
    Комментировать
  • Как в таблицах «Google Drive» посчитать количество строк за определённый час?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Не так красиво как у Cguru, но ...

    Можно вывести результат сразу в запросе
    =QUERY(A:A;"select count(A) where hour(A) = 0")
    При этом в вывод попадет две строки - заголовок агрегатной функции и результат
    count
    3

    Транспонированный вариант с заданным заголовком "Количество"
    =TRANSPOSE(QUERY(A:A;"select count(A) where hour(A) = 0 label count(A) 'Количество'"))

    Количество3
    Ответ написан
    Комментировать
  • Как сделать правильно запрос в Google Docs?

    oshliaer
    @oshliaer
    Google Products Expert
    Вам необходимо ввести в запрос значение текущей даты.

    Например,
    =QUERY('БРОНИ'!A:O; "select A,E,D,H,G,K where toDate(A) = date '" & TEXT(NOW(),"YYYY-MM-DD") & "'"; 1)


    Замечу, что если использовать оператор now() языка запросов, то она возвращает результат на месяц больше
    =QUERY(,"select toDate(now())")
    Поэтому, предпочтительнее формировать дату из строки.

    З.Ы.: пожалуйста, измените тэг поста на spreadsheets
    Ответ написан
    Комментировать
  • Как сделать div на весь экран с элементами меню?

    oshliaer
    @oshliaer
    Google Products Expert
    Рекомендую использовать карту как фон страницы. Довольно простая настройка описана тут Use Google Maps as a Background of your Webpage
    Ответ написан
  • Как отыскать в Google drive внешнего юзера, что бы отрубить доступ?

    oshliaer
    @oshliaer
    Google Products Expert
    Здравствуйте.

    Только для Google Apps

    Попробуйте приложение #1 Audit Tool for Google Apps. Под невзрачным дизайном скрывается мощный инструмент и добропорядочная поддержка. Статистика доступна бесплатна для всех. По ней как раз вы можете определить, кто кому что предоставил и с какими правами. По подписке на приложение вы можете получить дополнительный функционал. Бесплатная подписка доступна для некоммерческих организаций.
    Еще жалуют Promevo gPanel for Google Apps Administration, но мне не довелось ее использовать.

    В любом случае, при Google Apps и большом количестве пользователей инструмент администрирования:
    ➡ будет куплен
    ➡ будет написан собственными руками

    Для конкретного пользователя. Любой аккаунт.

    Используйте Расширенный поиск с использованием нотации to:email.

    Вы также можете изменить права доступа для файлов (только формат Диска Google), Владельцем которых не являетесь. Для этого сам Владелец должен не запрещать возможность изменения прав. По результатам поиска вы можете это увидеть.
    Ответ написан
    Комментировать