Получение 1-й непустой ячейки определенного столбца путем поиска снизу листа.
// Pattern 4: TextFinder
const patternB4_ = (columnNumber) => {
const sheet = SpreadsheetApp.openById(ssId).getSheets()[0];
const search = sheet
.getRange(1, columnNumber, sheet.getMaxRows())
.createTextFinder(".")
.useRegularExpression(true)
.findPrevious();
return search ? search.getRow() : 1;
};Forwarded from DidacticСardsBot
Скрипт Google Apps: сохранение уникального ключа пользователя от пользователя, получающего доступ к вашему веб-приложению
Источник:
Почему это важно? Что ж, вы можете ограничить количество раз, когда пользователь отправляет форму в вашем WebApp. Если вы можете получить уникальный ключ доступа пользователя, вы можете сохранить количество попыток пользователя и проверить его перед отправкой данных.
••••••••••
Обсудить:
Источник:
Почему это важно? Что ж, вы можете ограничить количество раз, когда пользователь отправляет форму в вашем WebApp. Если вы можете получить уникальный ключ доступа пользователя, вы можете сохранить количество попыток пользователя и проверить его перед отправкой данных.
••••••••••
Обсудить:
Yagisanatode
Google Apps Script: Store a Unique User Key from a User Accessing your WebApp [updated Dec 2021] - Yagisanatode
Google Apps Script: WebApp [updated Dec 2021 – With thanks to Greg S] In this tutorial, we will cover how you can get a unique temporary access key from a user accessing your WebApp that lasts for 30 days. Temporary access keys allow you to track users as…
Уникальные без удаления строк
#snippet #JS #GAS
#snippet #JS #GAS
function g(range){
//var range=[['v'],["v"],["b"]]
var r=range.flat()
var u=[...new Set(r)]
var d=r.reduce((acc, el) => {
acc[el] = (acc[el] || 0) + 1;
return acc;
}, {})
var a=Object.entries(d)
return a.map((e)=>[e[0],...Array(e[1]-1)
.fill('')])
.flat()
.map((h,i)=>[range[i][0],h])
}Путь к пониманию шаблонных литералов в JavaScript
Источник:
Шаблонные литералы дают нам новый механизм создания строковых значений. Этот механизм отличается множеством мощных возможностей, среди которых — упрощение создания многострочных конструкций и использование местозаполнителей для внедрения в строки результатов вычисления выражений. Кроме того, тут имеется и ещё одна возможность — теговые шаблоны (tagged template literals). Это — расширенная форма шаблонных литералов. Теговые шаблоны позволяют создавать строки с использованием выражений, находящихся внутри строк, и с применением особых функций. Всё это расширяет возможности программистов по работе со строками, позволяя, например, создавать динамические строки, которые могут представлять собой URL, или писать функции для тонкой настройки HTML-элементов.
••••••••••
#JS #book
Обсудить:
Источник:
Шаблонные литералы дают нам новый механизм создания строковых значений. Этот механизм отличается множеством мощных возможностей, среди которых — упрощение создания многострочных конструкций и использование местозаполнителей для внедрения в строки результатов вычисления выражений. Кроме того, тут имеется и ещё одна возможность — теговые шаблоны (tagged template literals). Это — расширенная форма шаблонных литералов. Теговые шаблоны позволяют создавать строки с использованием выражений, находящихся внутри строк, и с применением особых функций. Всё это расширяет возможности программистов по работе со строками, позволяя, например, создавать динамические строки, которые могут представлять собой URL, или писать функции для тонкой настройки HTML-элементов.
••••••••••
#JS #book
Обсудить:
Хабр
Путь к пониманию шаблонных литералов в JavaScript
Спецификация ECMAScript, вышедшая в 2015 году (ES6), добавила в JavaScript новую возможность — шаблонные литералы (template literals). Шаблонные литералы дают на...
Шаблоны, или что общего у приходного кассового ордера и метода ToString() / Хабр
https://m.habr.com/ru/post/560722/
https://m.habr.com/ru/post/560722/
Хабр
Шаблоны, или что общего у приходного кассового ордера и метода ToString()
Вот как-то так оно и выглядит...Задачу генерации текстовых строк по шаблону никак нельзя назвать новой, даже с натяжкой. Сюда можно отнести и заполнение стандартных форм наподобие приходных...
Forwarded from Alex Pirks
Из собственного наблюдения.
Дело не в CRM и таблицах. А в неумении менеджеров работать с данными, которые живут в бизнес процессах.
Если менеджер понимает с чем он имеет дело, он сам выберет необходимый ему инструмент и ... архитектуру проекта.
А таблицы это как мираж озера в пустыне, кажется "щас напьтемся досыта", ан нет, вы еще только в начале пути автоматизации бизнес процессов.
Еще добавлю, одну мысль, которая была отпечатана на бумаге и висела в рамке у одной команды разработчиков.
"Автоматизация эффективных процессов увеличивает их эффективность, автоматизация неэффективных - увеличивает неэффективность."
Дело не в CRM и таблицах. А в неумении менеджеров работать с данными, которые живут в бизнес процессах.
Если менеджер понимает с чем он имеет дело, он сам выберет необходимый ему инструмент и ... архитектуру проекта.
А таблицы это как мираж озера в пустыне, кажется "щас напьтемся досыта", ан нет, вы еще только в начале пути автоматизации бизнес процессов.
Еще добавлю, одну мысль, которая была отпечатана на бумаге и висела в рамке у одной команды разработчиков.
"Автоматизация эффективных процессов увеличивает их эффективность, автоматизация неэффективных - увеличивает неэффективность."
Forwarded from Что вы мне рекламируете?
Лайфхак для тех, кто пишет
Сам я вообще ненавижу писать, удивительно было создавать этот канал и блог, когда я диплом еле-еле написал, для меня писать было чем-то сверхъестественным, я был тем самым человеком из мемов, который не мог подступить к написанию и сидел перед белым Word A4 несколько часов, но недавно я понял, как этот процесс улучшить. Этот локальный хинт для как раз тех, кому сложно начать.
На самом деле я до сих пор иногда также туплю, возможно поэтому в блоге статьи появляются раз в квартал, лол.
Секрет в том, чтобы перед написанием чего-то сесть на 30 мин и почитать книгу. Идеально, если это какая-нибудь художественная, но на самом деле любая подойдет (хотя какая-нибудь Python for dummies может и не подойдет).
Как это работает (мое предположение):
1. Ты сосредотачиваешься, 30 мин чтения на самом деле не хуже медитаций. Думаю, дело как раз в том, что лодка клипового мышления внутри головы перестает так сильно раскачиваться, как вовремя постоянного серфинга лент
2. Типичный день, особенно будни — это текучка из задач, постоянный тудулист, по которому ты идешь, рутина без какого-либо творчества. Написать что-то красиво и интересно — задача из другого раздела.
Сесть почитать — это окунуться в мир своих фантазий, 30 мин и вы фреш для глаголинга пером
Минус в том, что можно сильно увлечься книгой, поэтому нужно сразу себя настроить на короткий спринт. А еще этот прием подойдет для каких-нибудь брейнштормов, людям, кому иногда нужно из себя креатив на конвейере поставлять 👁
Сам я вообще ненавижу писать, удивительно было создавать этот канал и блог, когда я диплом еле-еле написал, для меня писать было чем-то сверхъестественным, я был тем самым человеком из мемов, который не мог подступить к написанию и сидел перед белым Word A4 несколько часов, но недавно я понял, как этот процесс улучшить. Этот локальный хинт для как раз тех, кому сложно начать.
На самом деле я до сих пор иногда также туплю, возможно поэтому в блоге статьи появляются раз в квартал, лол.
Секрет в том, чтобы перед написанием чего-то сесть на 30 мин и почитать книгу. Идеально, если это какая-нибудь художественная, но на самом деле любая подойдет (хотя какая-нибудь Python for dummies может и не подойдет).
Как это работает (мое предположение):
1. Ты сосредотачиваешься, 30 мин чтения на самом деле не хуже медитаций. Думаю, дело как раз в том, что лодка клипового мышления внутри головы перестает так сильно раскачиваться, как вовремя постоянного серфинга лент
2. Типичный день, особенно будни — это текучка из задач, постоянный тудулист, по которому ты идешь, рутина без какого-либо творчества. Написать что-то красиво и интересно — задача из другого раздела.
Сесть почитать — это окунуться в мир своих фантазий, 30 мин и вы фреш для глаголинга пером
Минус в том, что можно сильно увлечься книгой, поэтому нужно сразу себя настроить на короткий спринт. А еще этот прием подойдет для каких-нибудь брейнштормов, людям, кому иногда нужно из себя креатив на конвейере поставлять 👁
Разработка Технического задания по ГОСТ 34 легко и просто / Habr
https://m.habr.com/ru/amp/post/432852/
https://m.habr.com/ru/amp/post/432852/
Хабр
Разработка Технического задания по ГОСТ 34 легко и просто
Нередко слышишь мнение, что составление Технического задания по ГОСТ 34 (ТЗ) занятие не только трудоемкое, но и крайне раздражающее, поскольку приходится писать...
How to automatically refresh a filter view in Google Sheets when new data comes in via Google Forms?
Источник:
Я провел утро в поисках чего-то похожего.
Источник:
Я провел утро в поисках чего-то похожего.
function myFunc() {
var spreadSheet = SpreadsheetApp.getActive();
var reportSheet = spreadSheet.getSheetByName('Report Sheet');
var columnCount = reportSheet.getLastColumn();
reportSheet.clearContents(); // I do this because each day gets a fresh report
if(reportSheet.getFilter()) {
var hadFilter = true;
var sheetFilter = reportSheet.getFilter();
var filterSettings = new Array(columnCount);
// Array indexed at 0, columns indexed at 1. A recipe for disaster!
for(var i = 0; i < columnCount; i++) {
filterSettings[i] = sheetFilter.getColumnFilterCriteria(i + 1);
}
// If you attempt to append data over a set of rows that had a filter still applied,
// things get weird. Hence removing and re-creating the filter.
sheetFilter.remove();
}
// Not going to bore you with the details;
var arrayOfCells = myCustomFunctionThatReturnsData();
reportSheet.getRange(1,1,arrayOfCells.length,columnCount).setValues(arrayOfCells);
if(hadFilter) {
var sheetFilter = reportSheet.getDataRange().createFilter();
for(var i = 0; i < columnCount; i++) {
sheetFilter.setColumnFilterCriteria(i + 1, filterSettings[i])
}
// Here's the magic! Without this, you get a filter that looks
// like it should work but doesn't actually apply.
SpreadsheetApp.flush();
}
}Web Applications Stack Exchange
How to automatically refresh a filter view in Google Sheets when new data comes in via Google Forms?
I have a filter view in Google Sheets that does not refresh when new data comes in via Google Forms.
To refresh the filter view, I can remove the filter and apply it again, or even just click "OK"...
To refresh the filter view, I can remove the filter and apply it again, or even just click "OK"...
Forwarded from DidacticСardsBot
Логирование активности с использованием Web Beacon API
Источник:
/ URL куда отправить данные
let url = '/api/my-endpoint';
// Создание нового FormData
let data = new FormData();
data.append('hello', 'world');
let result = navigator.sendBeacon(url, data);
if (result) {
console.log('Добавлено в очередь!');
} else {
console.log('Ошибка.');
}
••••••••••
Обсудить:
Источник:
/ URL куда отправить данные
let url = '/api/my-endpoint';
// Создание нового FormData
let data = new FormData();
data.append('hello', 'world');
let result = navigator.sendBeacon(url, data);
if (result) {
console.log('Добавлено в очередь!');
} else {
console.log('Ошибка.');
}
••••••••••
Обсудить:
Хабр
Логирование активности с использованием Web Beacon API
Beacon API — это основанный на JavaScript интерфейс для: отправки небольшого количества данных на сервер с браузера, без ожидания ответа. В этой статье, мы расс...