Проверка содержит ли ячейка checkbox
#snippet #GAS
#snippet #GAS
/**
* Проверка содержит ли ячейка checkbox
*
* @param {RANGE} cell
* @returns {Boolean}
*/
function isCheck(cell){
var rule = cell.getDataValidation();
if (rule != null&&rule.getCriteriaType()=='CHECKBOX') {
var criteria = rule.getCriteriaType();
var args = rule.getCriteriaValues();
return true
} else {
return false
}
}GAS CacheService
EnhancedCacheService
1.Поддержка собственных типов JavaScript, таких как: число, логическое значение, объект.
2.Поддержка значений более 128 КБ
3.Дополнительная информация о записях кеша - получить дату последнего обновления записи
github
blog
EnhancedCacheService
1.Поддержка собственных типов JavaScript, таких как: число, логическое значение, объект.
2.Поддержка значений более 128 КБ
3.Дополнительная информация о записях кеша - получить дату последнего обновления записи
github
blog
GitHub
GoogleAppsScripts/EnhancedCacheService at master · yinonavraham/GoogleAppsScripts
A collection of scripts for Google Apps Scripts. Contribute to yinonavraham/GoogleAppsScripts development by creating an account on GitHub.
const generateRandomColour = () => "#" + Math.floor(Math.random()*16777215).toString(16);Быстрое и простое тестирование JavaScript с помощью «Assert»
Код добавляющий Assert в консоль Google App Script
Пример
Почитать про Assert
Код добавляющий Assert в консоль Google App Script
Пример
Почитать про Assert
Pastiebin
Pastiebin.com
6090fc740c99b
6090fc740c99b
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
Загрузка данных со страницы в виде файла
Источник:
Если есть задача сформировать на лету данные в файл и загрузить их, например, трансформировать таблицу в CSV файл, то есть простой способ как загрузить такие данные:
Обсудить:
Источник:
Если есть задача сформировать на лету данные в файл и загрузить их, например, трансформировать таблицу в CSV файл, то есть простой способ как загрузить такие данные:
const downloadAsCSVFile = function(csv, fname) {
let csvfile = new Blob([csv], {type: 'text/csv'})
let downlink = document.createElement('a')
downlink.download = fname
downlink.href = window.URL.createObjectURL(csvfile)
downlink.style.display = 'none'
document.body.appendChild(downlink)
downlink.click()
document.body.removeChild(downlink)
}
downloadAsCSVFile(anyDataString, 'filename.csv')
••••••••••Обсудить:
Forwarded from DidacticСardsBot
Benchmark: fetchAll method in UrlFetch service for Google Apps Script
Источник:
В серверном скрипте установлен сон на 5 секунд. Для fetchAll () общее затраченное время составляет 5,5 с.
Для fetchAll () ResponsedOrder соответствует порядку запросов. Порядок запросов: действие1, действие2, действие3, действие4 и действие5.
Для fetchAll () actualOrder НЕ совпадает с порядком запросов. Порядок отличается каждый раз.
Для fetch () добавляется 5-секундный сон при каждой выборке. Таким образом, общее затраченное время составляет 27,0 с.
Для fetch () ResponsedOrder соответствует порядку запросов.
Для fetch () actualOrder совпадает с порядком запросов.
Резюме
Было обнаружено, что метод fetchAll работает с асинхронной обработкой.
После выполнения асинхронной обработки возвращаемые значения переупорядочиваются в соответствии с порядком запросов.
Также было обнаружено, что если вы хотите получить данные из нескольких URL-адресов, стоимость процесса UrlFetchApp.fetchAll()намного ниже, чем при UrlFetchApp.fetch()использовании цикла for.
Ограничение количества запросов
Могу подтвердить, что 1000 запросов работают нормально. Но я не мог найти ограничения.
••••••••••
Обсудить:
Источник:
В серверном скрипте установлен сон на 5 секунд. Для fetchAll () общее затраченное время составляет 5,5 с.
Для fetchAll () ResponsedOrder соответствует порядку запросов. Порядок запросов: действие1, действие2, действие3, действие4 и действие5.
Для fetchAll () actualOrder НЕ совпадает с порядком запросов. Порядок отличается каждый раз.
Для fetch () добавляется 5-секундный сон при каждой выборке. Таким образом, общее затраченное время составляет 27,0 с.
Для fetch () ResponsedOrder соответствует порядку запросов.
Для fetch () actualOrder совпадает с порядком запросов.
Резюме
Было обнаружено, что метод fetchAll работает с асинхронной обработкой.
После выполнения асинхронной обработки возвращаемые значения переупорядочиваются в соответствии с порядком запросов.
Также было обнаружено, что если вы хотите получить данные из нескольких URL-адресов, стоимость процесса UrlFetchApp.fetchAll()намного ниже, чем при UrlFetchApp.fetch()использовании цикла for.
Ограничение количества запросов
Могу подтвердить, что 1000 запросов работают нормально. Но я не мог найти ограничения.
••••••••••
Обсудить:
Gist
Benchmark: fetchAll method in UrlFetch service for Google Apps Script
Benchmark: fetchAll method in UrlFetch service for Google Apps Script - submit.md
Forwarded from DidacticСardsBot
В этом руководстве я покажу вам, как скрыть лист в электронной таблице Google Sheets с помощью скрипта приложений. Я также покажу вам, как показать или активировать ранее скрытый лист.
Источник:
••••••••••
Обсудить:
Источник:
••••••••••
Обсудить:
spreadsheet.dev
Hide or show a sheet in Google Sheets using Apps Script
Learn how to hide a sheet, or show a hidden sheet in Google Sheets using Apps Script.
Forwarded from Azamat Zhaksybayev
Trello Api + GSheet
Оставлю здесь, может понадобится кому-нибудь. Из таблицы можно создать карточку в Трелло и обратно в таблицу получить статус карточки через вебхуки. В таблице есть ссылка на открытую доску в трелло для теста
https://docs.google.com/spreadsheets/d/1AqV7u2t2ZtwsXyY4TFo1yJJ378nQPDluDHVUf-NYGD8/edit?usp=sharing
Оставлю здесь, может понадобится кому-нибудь. Из таблицы можно создать карточку в Трелло и обратно в таблицу получить статус карточки через вебхуки. В таблице есть ссылка на открытую доску в трелло для теста
https://docs.google.com/spreadsheets/d/1AqV7u2t2ZtwsXyY4TFo1yJJ378nQPDluDHVUf-NYGD8/edit?usp=sharing
Google Docs
GSheet + Trello
Заказы
1. Чтобы создать карточку в Трелло нажмите на верхнем меню "Заказы" - "Новый Заказ"
2. После создания новой строки внесите остальные данные вручную (Дата, срок, описание, и т.д.) - Данные автоматически впишутся в карточку трелло по триггеру через…
1. Чтобы создать карточку в Трелло нажмите на верхнем меню "Заказы" - "Новый Заказ"
2. После создания новой строки внесите остальные данные вручную (Дата, срок, описание, и т.д.) - Данные автоматически впишутся в карточку трелло по триггеру через…
Forwarded from volond
This media is not supported in your browser
VIEW IN TELEGRAM
Понадобилось мне синхронизировать заголовки столбцов на разных листах, но хотелось какой-нибудь функционал, чтобы не приходилось бегать и производить настройку с одного места.
Добавил названия листов и указал в какой строке находятся заголовки в этом листе
Формулой подтянул заголовки, но как известно попытка внести данные в ячейки, которые затрагивают эту формулу ломают эту формулу ,поэтому была был придуман какой функционал
Он позволяет изменить заголовок в соответствующем столбце или добавить его в конец строки заголовков соответствующего листа
Код
Добавил названия листов и указал в какой строке находятся заголовки в этом листе
Формулой подтянул заголовки, но как известно попытка внести данные в ячейки, которые затрагивают эту формулу ломают эту формулу ,поэтому была был придуман какой функционал
Он позволяет изменить заголовок в соответствующем столбце или добавить его в конец строки заголовков соответствующего листа
Код
Отфильтруем Массив объектов по переданному массиву ключей
/**#snippet #JS
* Отфильтруем Массив объектов по переданному массиву ключей
* Значения этих в объектах должны соответствовать истине
* @param {Array} filter
* @param {Array[Object]} obj
* @returns {Array}
* var filter=['a','b']
* var obj=[{a:false,b:1,c:3},{a:true,b:1,c:0}]
* return [{a:true,b:1,c:0}]
*/
function filterObject(filter,obj){
var some=(x)=>!x
return obj.filter(row=>!filter.map(key=>row[key]).some(some))
}
Список проектов приложений Google скрипт - CodeRoad
https://coderoad.ru/52087906/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D0%B2-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9-Google-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82
https://coderoad.ru/52087906/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D0%B2-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9-Google-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82
coderoad.ru
Список проектов приложений Google скрипт
- CodeRoad
- CodeRoad
О получении списка файлов проектов типа сценария с привязкой к контейнеру и экспорте каждого сценария из проекта, пожалуйста, проверьте следующий ответ. Получить список файлов проектов типа сценария...
СyrillicPattern
#regexp
#regexp
function cyrillicPattern(){
const cyrillicPattern = /[\u0400-\u04FF]/;
const cyrillicPattern1 = /(?<I>[\u0400-\u04FF]+)\s{1,}(?<F>[\u0400-\u04FF]+)\s{1,}(?<O>[\u0400-\u04FF]+)/;
console.log('Привіт:', cyrillicPattern.test('Привіт'));
console.log('Hello:', cyrillicPattern.test('Hello'));
console.log('Привіт Вася Пупкин', 'Привіт Вася Пупкин'.match(cyrillicPattern1));
var {I,F,O}='Привіт Вася Пупкин'.match(cyrillicPattern1).groups
console.log([I,F,O])//[ 'Привіт', 'Вася', 'Пупкин' ]
}Свяжите проект облачной платформы с проектом GAS.
Презентация
Источник:Linking Cloud Platform Project to Google Apps Script Project
Требуеться для ProjectApp2
Презентация
Источник:Linking Cloud Platform Project to Google Apps Script Project
Требуеться для ProjectApp2
Google Docs
Свяжите проект облачной платформы с проектом GAS.
В таблице Инструменты Редактор сценариев
Получение 1-й пустой ячейки определенного столбца путем поиска в TOP листа
// Pattern 3: getNextDataCell
const patternA3_ = (columnNumber) => {
const range = SpreadsheetApp.openById(ssId)
.getSheets()[0]
.getRange(1, columnNumber);
return range.getDisplayValue()
? range.getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow() + 1
: 1;
};