Forwarded from DidacticСardsBot
VtstGApi
Источник:
Клиентская библиотека Google API для скрипта Google Apps.
Обзор
Эта библиотека является универсальным клиентом для вызова API Google (и конечных точек Google Cloud) в скрипте Google Apps . Он имеет интерфейс, аналогичный клиентской библиотеке API для JavaScript, с той заметной разницей, что вызовы выполняются синхронно в соответствии с общей моделью библиотек сценариев Google Apps. Он реализует протокол OAuth 2.0 для аутентификации и авторизации.
Как использовать в своем проекте?
Вы можете добавить библиотеку в свой проект скрипта Google Apps, следуя процедуре, описанной здесь . Ключ проекта библиотеки - MVvDIVYrTbZmeRCTovQboz_YB2d3K7A2c. Вам следует выбрать последнюю доступную версию.
Руководство
Вызов API без аутентификации
Вызов API с аутентификацией OAuth 2.0
Пакетные запросы
Примечание об обещаниях
••••••••••
Обсудить:
Источник:
Клиентская библиотека Google API для скрипта Google Apps.
Обзор
Эта библиотека является универсальным клиентом для вызова API Google (и конечных точек Google Cloud) в скрипте Google Apps . Он имеет интерфейс, аналогичный клиентской библиотеке API для JavaScript, с той заметной разницей, что вызовы выполняются синхронно в соответствии с общей моделью библиотек сценариев Google Apps. Он реализует протокол OAuth 2.0 для аутентификации и авторизации.
Как использовать в своем проекте?
Вы можете добавить библиотеку в свой проект скрипта Google Apps, следуя процедуре, описанной здесь . Ключ проекта библиотеки - MVvDIVYrTbZmeRCTovQboz_YB2d3K7A2c. Вам следует выбрать последнюю доступную версию.
Руководство
Вызов API без аутентификации
Вызов API с аутентификацией OAuth 2.0
Пакетные запросы
Примечание об обещаниях
••••••••••
Обсудить:
GitHub
google-apps-scripts/VtstGApi at master · vtst/google-apps-scripts
Libraries for Google Apps Scripts. Contribute to vtst/google-apps-scripts development by creating an account on GitHub.
Forwarded from DidacticСardsBot
клубника
Источник:
Библиотека JavaScript для удобного использования OAuth2 и API Google.
Как пользоваться?
Импортируйте https://cdn.rawgit.com/vtst/strawberry/master/dist/strawberry.min.js на свою HTML-страницу.
••••••••••
Обсудить:
Источник:
Библиотека JavaScript для удобного использования OAuth2 и API Google.
Как пользоваться?
Импортируйте https://cdn.rawgit.com/vtst/strawberry/master/dist/strawberry.min.js на свою HTML-страницу.
••••••••••
Обсудить:
GitHub
GitHub - vtst/strawberry: A JavaScript library for easy use of OAuth2 and Google APIs
A JavaScript library for easy use of OAuth2 and Google APIs - GitHub - vtst/strawberry: A JavaScript library for easy use of OAuth2 and Google APIs
Forwarded from DidacticСardsBot
Стратегии ускорения работы с Google Таблицами
Источник:
Как распознать медленные Google Таблицы
Знайте ограничения размера Google Таблиц
Измерьте размер таблицы Google
Измерьте скорость вычислений Google Sheet
Удалить неиспользуемые ячейки
Преобразуйте формулы в статические значения, где это возможно
Использовать ссылки закрытого диапазона
Удалите энергозависимые функции или используйте с осторожностью
Стратегии Vlookup
Стратегии Index-Match
Стратегии функции запроса
Стратегии формул массива
Стратегии импорта формул
Стратегии работы Google Финансов
Используйте операторы IF для управления вызовами формул
Управляйте дорогими формулами с помощью переключателя управления
Используйте функции Filter, Unique и Array_Constrain для создания небольших вспомогательных таблиц
Избегайте длинных цепочек расчетов
Справочные данные на том же листе
Используйте вспомогательные столбцы
Разделите медленный лист Google на отдельные листы
Экономно используйте условное форматирование
Используйте возможности скрипта приложений
Экономно используйте собственные формулы
Другие советы по устранению неполадок для медленных Google Таблиц
Понимание того, что изменения в облаке распространяются через некоторое время
Знайте, когда пора переходить к базе данных
••••••••••
Обсудить:
Источник:
Как распознать медленные Google Таблицы
Знайте ограничения размера Google Таблиц
Измерьте размер таблицы Google
Измерьте скорость вычислений Google Sheet
Удалить неиспользуемые ячейки
Преобразуйте формулы в статические значения, где это возможно
Использовать ссылки закрытого диапазона
Удалите энергозависимые функции или используйте с осторожностью
Стратегии Vlookup
Стратегии Index-Match
Стратегии функции запроса
Стратегии формул массива
Стратегии импорта формул
Стратегии работы Google Финансов
Используйте операторы IF для управления вызовами формул
Управляйте дорогими формулами с помощью переключателя управления
Используйте функции Filter, Unique и Array_Constrain для создания небольших вспомогательных таблиц
Избегайте длинных цепочек расчетов
Справочные данные на том же листе
Используйте вспомогательные столбцы
Разделите медленный лист Google на отдельные листы
Экономно используйте условное форматирование
Используйте возможности скрипта приложений
Экономно используйте собственные формулы
Другие советы по устранению неполадок для медленных Google Таблиц
Понимание того, что изменения в облаке распространяются через некоторое время
Знайте, когда пора переходить к базе данных
••••••••••
Обсудить:
Benlcollins
Slow Google Sheets? Here are 27 techniques you can try right now
Slow Google Sheets? Follow these 27 techniques to diagnose and improve the performance of even the worst performing Google Sheets.
Forwarded from DidacticСardsBot
Как я опубликовал PWA на Svelte в Google Play
Источник:
Создание приложения
Первая версия Metalz была написана на react и mobx-state-tree. Потом я захотел выложить приложение в Google Play и переделал все на react-native с использованием шаблона expo. Когда Google под угрозой удаления потребовал 64-битную версию, я переписал все на Svelte. Для сравнения билд на react весил ~300kb, сборка на Svelte ~90kb. Никаких оптимизаций сборки я не проводил, только стандартные шаблоны.
••••••••••
Обсудить:
Источник:
Создание приложения
Первая версия Metalz была написана на react и mobx-state-tree. Потом я захотел выложить приложение в Google Play и переделал все на react-native с использованием шаблона expo. Когда Google под угрозой удаления потребовал 64-битную версию, я переписал все на Svelte. Для сравнения билд на react весил ~300kb, сборка на Svelte ~90kb. Никаких оптимизаций сборки я не проводил, только стандартные шаблоны.
••••••••••
Обсудить:
temofeev.ru
Как я опубликовал PWA на Svelte в Google Play
Мне нравится метал музыка разных направлений. Для отслеживания новинок я сделал парсер, который ищет свежие альбомы и складывает их в базу. За время существования приложения парсер я почти не трогал, хотя он и далек от идеала, а вот фронтенд был переделан…
Microsoft бесплатно раздает ПО для автоматизации унылой работы без навыков программирования - CNews
https://www.cnews.ru/news/top/2021-03-03_microsoft_razdaet_vsem_zhelayushchim
https://www.cnews.ru/news/top/2021-03-03_microsoft_razdaet_vsem_zhelayushchim
CNews.ru
Microsoft бесплатно раздает ПО для автоматизации унылой работы без навыков программирования - CNews
Microsoft открыла всем пользователям Windows 10 бесплатный доступ к инструменту Power Automate Desktop, который позволяет автоматизировать рутинные задачи. Причем для этого не нужно уметь...
Forwarded from volond
В чат пришел @vitaliy_lebedev
И задал вопрос
•••••••
Коллеги, здравствуйте!
Подскажите, как сделать чтобы выпадающий список в B1 отображался,
только когда в А1 есть значение.
В других случаях - пустая ячейка
••••••
Представляю решение
Копируем таблицу и изучаем
P.S. Еще один пост про "Выпадающие списки"
Представлен на канале Google Таблицы
И задал вопрос
•••••••
Коллеги, здравствуйте!
Подскажите, как сделать чтобы выпадающий список в B1 отображался,
только когда в А1 есть значение.
В других случаях - пустая ячейка
••••••
Представляю решение
Копируем таблицу и изучаем
P.S. Еще один пост про "Выпадающие списки"
Представлен на канале Google Таблицы
const validateClear=(range,rule)=>{
range.clear().setDataValidation(null);
rule && range.setDataValidation(rule)
}
const getRule=(arr)=>{ return SpreadsheetApp
.newDataValidation()
.requireValueInList(arr)
.build();
}
const paste=({a1Not,sheetName},range)=>range.getSheet().getName()==sheetName&&range.getA1Notation()==a1Not
const config=()=>{
return {
arr:["Знач1","Знач2","Знач3"],
offsetCol:1,
a1Not:'A1',
sheetName:'Лист1'
}
}
function onEdit(e){
var {range,value,source}=e
let list=config()
let exit=!paste(list,range)
if (exit) return
let rule = getRule(list.arr)
let rangeValidation=range.offset(0,list.offsetCol)
let r=(!value)?validateClear(rangeValidation):validateClear(rangeValidation,rule)
//source.toast(`ok ${value}`) // Контроль
}Telegram
Чат | Таблицы и GAS-скрипты
Чат для обмена опытом по Google Sheets/Apps Script. Помощь — всегда бесплатно!
🚀 Обучение, заказ услуг, реклама: @vas_mnogo_a_ya_bot
📌 Правила чата: clck.ru/3RLWnG
📚 Оглавление: goo.gl/HdS2qn
⚡️ Поддержать, донат: clck.ru/3RLWhK
🔗 Канал @google_sheets
🚀 Обучение, заказ услуг, реклама: @vas_mnogo_a_ya_bot
📌 Правила чата: clck.ru/3RLWnG
📚 Оглавление: goo.gl/HdS2qn
⚡️ Поддержать, донат: clck.ru/3RLWhK
🔗 Канал @google_sheets
Forwarded from CONTRIBUTOR.PW (Alexander Ivanov)
Теперь сниппеты можно копировать себе через https://scrviz.web.app
Forwarded from DidacticСardsBot
Нельзя просто так взять и обратиться к фоновой странице
Источник:
JavaScript,
Google Chrome,
Расширения для браузеров
••••••••••
Обсудить:
Источник:
JavaScript,
Google Chrome,
Расширения для браузеров
••••••••••
Обсудить:
Хабр
Нельзя просто так взять и обратиться к фоновой странице
Всё дело — в политике безопасности, аналогичной кроссдоменной. Обращение к страницам других табов или к фоновой странице расширения сознательно ограничено, потому что они считаются страницами других...
Google Apps PASTEBIN
Зарегистрироваться на
https://pastiebin.com/account/register
Для получения:
api_user_name
api_user_password
Получить api_dev_key https://pastiebin.com/account/settings
Получить api_user_key выполнив getPastebinUserKey
Заполнить getPasteBinConfig
Обсудить:
Зарегистрироваться на
https://pastiebin.com/account/register
Для получения:
api_user_name
api_user_password
Получить api_dev_key https://pastiebin.com/account/settings
Получить api_user_key выполнив getPastebinUserKey
Заполнить getPasteBinConfig
/**
Google Apps PASTEBIN
Зарегистрироваться на https://pastiebin.com/account/register
Для получения:
api_user_name
api_user_password
Получить api_dev_key https://pastiebin.com/account/settings
Получить api_user_key выполнив getPastebinUserKey
Заполнить getPasteBinConfig
*/
function getPasteBinConfig() {
var api_dev_key='' // Ключ разработчика
var api_url='https://pastebin.com/api/api_post.php'
var api_url_login='https://pastebin.com/api/api_login.php'
var api_paste_name='volond'// Кем обубликовано
var api_user_name='' // Логин Пастебин
var api_user_password='' // Пароль Пастебин
var api_user_key=''
return {api_dev_key,api_url,api_url_login,api_paste_name,api_user_password,api_user_name, api_user_key}
}
function postPastebinPost() {
var {api_dev_key,api_url,api_paste_name,api_user_password,api_user_name,api_user_key}=getPasteBinConfig();
var contents = 'Hello World \n next line of content \n more text';
var payload = {
api_dev_key: api_dev_key, // https://pastebin.com/api#1
api_option: 'paste',
api_paste_name: api_paste_name,
api_paste_code: contents,
api_paste_private: '0', // public paste
api_user_name: api_user_name, // name of your Pastebin account
api_user_password: api_user_password, // password to your Pastebin account
api_user_key: api_user_key, // https://pastebin.com/api/api_user_key.html
};
var options = {
method : 'POST',
payload: payload
};
var url = 'https://pastebin.com/api/api_post.php';
var response = UrlFetchApp.fetch(url, options);
Logger.log(response.getContentText());
}
function getPastebinUserKey() {
var {api_dev_key,api_url_login, api_user_name,api_user_password}=getPasteBinConfig();
var payload = {
api_dev_key: api_dev_key, // https://pastebin.com/api#1
api_user_name: api_user_name, // name of your Pastebin account
api_user_password: api_user_password, // password to your Pastebin account
};
var options = {
method : 'POST',
payload: payload
};
var response = UrlFetchApp.fetch(api_url_login, options);
Logger.log(response.getContentText());
}
••••••••••Обсудить:
Pastiebin
Pastiebin.com
account :: register
account :: register
Pastie Bin is place to share your code / text snippets it also supports threads for people to post back to your current threads to allow easy collaboration
Работаем с Инициалами в Фамилиях
Обсудить:
/**••••••••••
* Работаем с Инициалами в Фамилиях
*/
var PIB=(key,row)=>(row)=>{
row[key]=row[key].split(" ").reduce((acc,el,i)=>{
var [a,...rest]=el
acc+=!i?[a.toUpperCase(),...rest].join(''):' '+a.toUpperCase()+'.'
return acc
},'')
return row
}
var PIBs=(key,range)=>{
const cPIB=PIB(key)
return range.map(cPIB)
}
console.log(PIBs(0,
[['иванов Иван иванович'],
['Петров петр Петрович']]
))
//Інформація [ [ 'Иванов И. И.' ], [ 'Петров П. П.' ] ]
Обсудить:
Forwarded from DidacticСardsBot
СПИСОК НАЗВАНИЙ ВСЕХ ПОДПАПОК ПАПКИ НА GOOGLE ДИСКЕ
Источник:
••••••••••
Обсудить:
Источник:
function getSubFolders(parent) {
parent = parent.getId();
var childFolder = DriveApp.getFolderById(parent).getFolders();
while(childFolder.hasNext()) {
var child = childFolder.next();
Logger.log(child.getName());
getSubFolders(child);
}
return;
}
function listFolders() {
var parentFolder = DriveApp.getFolderById("GOOGLE_DRIVE_FOLDER_ID");
var childFolders = parentFolder.getFolders();
while(childFolders.hasNext()) {
var child = childFolders.next();
Logger.log(child.getName());
getSubFolders(child);
}
}••••••••••
Обсудить:
www.appsscript.it
Elenco dei nomi di tutte le sottocartelle di una cartella in Google Drive | Apps Script
Con queste due funzioni è possibile ottenere la lista dei nomi delle sue relative sottocartelle e delle cartelle a sua volta annidate.
Forwarded from DidacticСardsBot
modularLibraries.gs
Источник:
Нативное решение Google Apps Script для создания, использования и разработки библиотек.
Этот ридми состоит из:
Документация о том, как это работает:
Глобальное Importпространство имен
Создание экземпляра пакета и размещение имен
Как писать собственные библиотеки по этому шаблону
Примеры библиотек, расширяющих API Google с использованием базового кода, приведенного выше.
Пример библиотеки HelloWorld
Requests.gs - это тяжелая оболочка вокруг UrlFetchApp, которая позволяет детально контролировать взаимодействия с Google API.
Sheets.gs - это легкая оболочка API электронных таблиц.
SheetsDB.gs расширяет Sheets.gs, вводя сеансы
Как писать свои собственные библиотеки
Мотивация
Мне нравится экосфера Python / Github, но мне приходится использовать AppsScripts на работе. В частности, D on't R epeat Y самостоятельно . Уметь повторно использовать код, который решает определенные проблемы, но вам нужно только понимать, как с ним взаимодействовать. Библиотека должна просто инкапсулировать определенную функциональность.
••••••••••
Обсудить:
Источник:
Нативное решение Google Apps Script для создания, использования и разработки библиотек.
Этот ридми состоит из:
Документация о том, как это работает:
Глобальное Importпространство имен
Создание экземпляра пакета и размещение имен
Как писать собственные библиотеки по этому шаблону
Примеры библиотек, расширяющих API Google с использованием базового кода, приведенного выше.
Пример библиотеки HelloWorld
Requests.gs - это тяжелая оболочка вокруг UrlFetchApp, которая позволяет детально контролировать взаимодействия с Google API.
Sheets.gs - это легкая оболочка API электронных таблиц.
SheetsDB.gs расширяет Sheets.gs, вводя сеансы
Как писать свои собственные библиотеки
Мотивация
Мне нравится экосфера Python / Github, но мне приходится использовать AppsScripts на работе. В частности, D on't R epeat Y самостоятельно . Уметь повторно использовать код, который решает определенные проблемы, но вам нужно только понимать, как с ним взаимодействовать. Библиотека должна просто инкапсулировать определенную функциональность.
••••••••••
Обсудить:
GitHub
GitHub - classroomtechtools/modularLibraries.gs: A collection of importable, modular libraries for any gas project.
A collection of importable, modular libraries for any gas project. - GitHub - classroomtechtools/modularLibraries.gs: A collection of importable, modular libraries for any gas project.
Forwarded from DidacticСardsBot
Работа с часовыми поясами в JavaScript
Источник:
Недавно я работал над задачей добавления часовых поясов в JS-библиотеку календаря, которую ведёт моя команда. Мне было хорошо известно о никудышной поддержке часовых поясов в JavaScript, но я надеялся, что абстрагирование имеющихся объектов данных позволит легко решить большинство трудностей.
Однако мои мечты пошли прахом. Когда я углубился в задачу, то понял, что в этом языке действительно трудно работать с часовыми поясами. Реализовать что-то сложнее простого форматирования отображения времени и вычисления даты с помощью комплексных операций (функции календаря) было чрезвычайно трудным делом. Я получил ценный опыт решения этой проблемы, и это повлекло за собой новые затруднения.
В этой статье я хочу обсудить, с чем я столкнулся и как это решал. Пока я писал текст, осознал, что причиной всех невзгод было плохое понимание мной самой темы часовых поясов. В свете этого осознания я предлагаю сначала подробно поговорить об определении и стандартах, а уже потом переходить к JavaScript.
••••••••••
Обсудить:
Источник:
Недавно я работал над задачей добавления часовых поясов в JS-библиотеку календаря, которую ведёт моя команда. Мне было хорошо известно о никудышной поддержке часовых поясов в JavaScript, но я надеялся, что абстрагирование имеющихся объектов данных позволит легко решить большинство трудностей.
Однако мои мечты пошли прахом. Когда я углубился в задачу, то понял, что в этом языке действительно трудно работать с часовыми поясами. Реализовать что-то сложнее простого форматирования отображения времени и вычисления даты с помощью комплексных операций (функции календаря) было чрезвычайно трудным делом. Я получил ценный опыт решения этой проблемы, и это повлекло за собой новые затруднения.
В этой статье я хочу обсудить, с чем я столкнулся и как это решал. Пока я писал текст, осознал, что причиной всех невзгод было плохое понимание мной самой темы часовых поясов. В свете этого осознания я предлагаю сначала подробно поговорить об определении и стандартах, а уже потом переходить к JavaScript.
••••••••••
Обсудить:
Хабр
Работа с часовыми поясами в JavaScript
Недавно я работал над задачей добавления часовых поясов в JS-библиотеку календаря, которую ведёт моя команда. Мне было хорошо известно о никудышной поддержке ч...
База данных JavaScript TaffyDB
Источник:
Вступление
Как вы когда-нибудь замечали, что литералы объектов JavaScript очень похожи на записи? И что, если вы оберните группу из них в массив, у вас будет что-то, очень похожее на таблицу базы данных? TaffyDB - это библиотека, которая привносит в эту концепцию мощную функциональность базы данных и быстро улучшает способ работы с данными внутри JavaScript.
••••••••••
Обсудить:
Источник:
Вступление
Как вы когда-нибудь замечали, что литералы объектов JavaScript очень похожи на записи? И что, если вы оберните группу из них в массив, у вас будет что-то, очень похожее на таблицу базы данных? TaffyDB - это библиотека, которая привносит в эту концепцию мощную функциональность базы данных и быстро улучшает способ работы с данными внутри JavaScript.
••••••••••
Обсудить:
Forwarded from DidacticСardsBot
Как написать промежуточное ПО для приложений Express.js
Источник:
Express.js - это легкая HTTP-структура для node.js, которая позволяет создавать различные приложения, от стандартного веб-сайта до REST API. Это не мешает вам с минимальным API, который вы заполняете своими индивидуальными потребностями.
Структура ExpressJS такова: все является «промежуточным программным обеспечением».
Что такое промежуточное ПО?
ПО промежуточного слоя - это функция, которая получает объекты запроса и ответа цикла HTTP-запроса / ответа. Он может изменять (преобразовывать) эти объекты перед передачей их следующей функции промежуточного программного обеспечения в цепочке. Он может решить написать в ответ; он также может завершить ответ, не продолжая цепочку.
В других фреймворках «промежуточное ПО» называется «фильтрами», но концепция та же: запрос, ответ и некоторые функции преобразования.
Очень простая функция промежуточного программного обеспечения выглядит так:
Это простейшее промежуточное ПО: функция с сигнатурой (req, res, next). В этом конкретном примере простой регистратор выводит некоторую информацию об этих запросах на консоль сервера, а затем продолжает цепочку, вызывая next().
Задача Express - управлять вашей цепочкой функций промежуточного программного обеспечения. Все промежуточное ПО должно выполнять три задачи:
Это должна быть функция, которая делает что-то потрясающее
Это хорошо задокументировано
Его можно легко добавить в существующее приложение Express.
••••••••••
Обсудить:
Источник:
Express.js - это легкая HTTP-структура для node.js, которая позволяет создавать различные приложения, от стандартного веб-сайта до REST API. Это не мешает вам с минимальным API, который вы заполняете своими индивидуальными потребностями.
Структура ExpressJS такова: все является «промежуточным программным обеспечением».
Что такое промежуточное ПО?
ПО промежуточного слоя - это функция, которая получает объекты запроса и ответа цикла HTTP-запроса / ответа. Он может изменять (преобразовывать) эти объекты перед передачей их следующей функции промежуточного программного обеспечения в цепочке. Он может решить написать в ответ; он также может завершить ответ, не продолжая цепочку.
В других фреймворках «промежуточное ПО» называется «фильтрами», но концепция та же: запрос, ответ и некоторые функции преобразования.
Очень простая функция промежуточного программного обеспечения выглядит так:
function logger(req,res,next){
console.log(new Date(), req.method, req.url);
next();
}Это простейшее промежуточное ПО: функция с сигнатурой (req, res, next). В этом конкретном примере простой регистратор выводит некоторую информацию об этих запросах на консоль сервера, а затем продолжает цепочку, вызывая next().
Задача Express - управлять вашей цепочкой функций промежуточного программного обеспечения. Все промежуточное ПО должно выполнять три задачи:
Это должна быть функция, которая делает что-то потрясающее
Это хорошо задокументировано
Его можно легко добавить в существующее приложение Express.
••••••••••
Обсудить:
Stormpath User Identity API
How to Write Middleware for Express.js Apps
Express.js is a lightweight HTTP framework for node.js that allows you to create a variety of applications, from a standard website to a REST API. It gets out of your way with a minimal API that you fill in with your custom needs. The structure of ExpressJS…
#getInfoTable
/**#
* V 0.1
* Получение информации о таблице
* возвращаемые поля задаем в infoSheet
* по умолчанию берутся из #infoSheetDefault
* @param {*} id
* @param {string} [infoSheet='']
* @returns
*/
function getInfoTable(id,infoSheet=''){
var {properties,sheets}=direct_get(id)
var {title,locale,autoRecalc,timeZone}=properties
var propSheet=sheets.map(sh=>propertiesToArray(sh))
var infoSheet=infoSheet||infoSheetDefault()
var map=(sh,pr)=>(pr)=>{
return {[pr]:lens(pr).get(sh.properties)}
}
var infoTableSheets=sheets.reduce(
(t,sh)=>[...t,infoSheet.map(map(sh))],[])
return infoTableSheets.map(el=>Object.assign(...[...el]))
}
Symbolic Links for Easier Multi-Folder Local Development
Источник:
Вы знаете, как открыть «проект» в локальном редакторе кода? Я предполагаю, что разные редакторы используют разную терминологию для этого, но по сути то, что вы делаете, - это открываете папку / каталог, и он показывает вам боковую панель, полную файлов и папок, по которым вы можете перемещаться, и т.
Обычно есть одна родительская папка, а все остальное находится в этой папке. Правильно? Что ж, этого не должно быть! Вот тут-то и пригодятся символические ссылки .
Иначе известные как символические ссылки , они похожи на указатели на другое место. Хотя на самом деле вам не нужно перемещать папку, на которую вы ссылаетесь, вы можете создать указатель на нее, который будет вести себя так, как если бы вы это сделали.
••••••••••
Источник:
Вы знаете, как открыть «проект» в локальном редакторе кода? Я предполагаю, что разные редакторы используют разную терминологию для этого, но по сути то, что вы делаете, - это открываете папку / каталог, и он показывает вам боковую панель, полную файлов и папок, по которым вы можете перемещаться, и т.
Обычно есть одна родительская папка, а все остальное находится в этой папке. Правильно? Что ж, этого не должно быть! Вот тут-то и пригодятся символические ссылки .
Иначе известные как символические ссылки , они похожи на указатели на другое место. Хотя на самом деле вам не нужно перемещать папку, на которую вы ссылаетесь, вы можете создать указатель на нее, который будет вести себя так, как если бы вы это сделали.
••••••••••
CSS-Tricks
Symbolic Links for Easier Multi-Folder Local Development | CSS-Tricks
You know how you open a "project" in a local code editor? I guess different editors have different terminology for it, but essentially what you are doing is
GAS-Trigger-TestingFunction.gs
Источник:
Обсудить:
#GAS #tools #debug
Источник:
/**
* Test function for onEdit. Passes an event object to simulate an edit to
* a cell in a spreadsheet.
*
* Check for updates: http://stackoverflow.com/a/16089067/1677912
*
* See https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
*
* on Script editor, set to debug THIS function, but create breakpoints
* on the onEdit Function
*/
function test_onEdit() {
onEdit({
user : Session.getActiveUser().getEmail(),
source : SpreadsheetApp.getActiveSpreadsheet(),
range : SpreadsheetApp.getActiveSpreadsheet().getActiveCell(),
value : SpreadsheetApp.getActiveSpreadsheet().getActiveCell().getValue(),
authMode : "LIMITED"
});
}
••••••••••Обсудить:
#GAS #tools #debug
Gist
A pattern to debug google apps script (GAS) triggered functions.
A pattern to debug google apps script (GAS) triggered functions. - GAS-Trigger-TestingFunction.gs