Volond Apps pinned «https://xfanatical.com/blog/print-google-sheet-as-pdf-using-apps-script/»
Forwarded from Михаил Х
Я для себя установил порог с строках. Где-то после 100.000 строк меняю бд на что-то другое. Даже замена spreadsheetapp на sheet api не помогает побороть глюки, разве что чуть ускоряет работу.
Из бд пока пробовал bigquery, firebase, cloud sql - все замечательно работают со скриптами.
Из бд пока пробовал bigquery, firebase, cloud sql - все замечательно работают со скриптами.
Forwarded from volond
function joingrp(range){
var o={}
for (row of range){
if (!o[row[0]]) {
o[row[0]]=[]
}
o[row[0]].push(row[1])
}
return Object.keys(o).map(key=>[key,o[key].join("\n")])
}Формулы Google Maps для Google Таблиц
Источник:
Используйте формулы Google Maps в Google Sheets, чтобы рассчитывать расстояния, время в пути, получать маршруты проезда, искать почтовые индексы с обратным геокодированием и многое другое!
1.Рассчитывайте расстояния между двумя городами или любыми адресами.
2.Рассчитайте время в пути (пешком, на машине или велосипеде) между двумя точками.
3.Получите координаты широты и долготы любого адреса на Google Maps.
4.Используйте обратное геокодирование, чтобы найти почтовый адрес по координатам GPS.
5.Распечатайте маршруты проезда между любыми точками на земле.
6.Получите адрес из самого почтового индекса.
P.S. Совет: повысьте производительность за счет кеширования результатов
••••••••••
Обсудить:
Источник:
Используйте формулы Google Maps в Google Sheets, чтобы рассчитывать расстояния, время в пути, получать маршруты проезда, искать почтовые индексы с обратным геокодированием и многое другое!
1.Рассчитывайте расстояния между двумя городами или любыми адресами.
2.Рассчитайте время в пути (пешком, на машине или велосипеде) между двумя точками.
3.Получите координаты широты и долготы любого адреса на Google Maps.
4.Используйте обратное геокодирование, чтобы найти почтовый адрес по координатам GPS.
5.Распечатайте маршруты проезда между любыми точками на земле.
6.Получите адрес из самого почтового индекса.
P.S. Совет: повысьте производительность за счет кеширования результатов
••••••••••
Обсудить:
Digital Inspiration
Google Maps Formulas for Google Sheets
Use Google Maps formulas inside Google Sheets to calculate distances, travel time, get driving directions, look up postal codes with reverse geocoding and more!
Самый простой способ получить файл ID из URL на Google Apps Script
Источник
Для Python:
Для фиксированной длины google drive IDs вы можете использовать это:
Другой подход без использования фиксированной длины, но вместо этого предшествующих паттернов:
Источник
function getIdFromUrl(url) {
return url.match(/[-\w]{25,}/);
}
Но не все так просто с ссылками именно на файлы на диске Для Python:
Для фиксированной длины google drive IDs вы можете использовать это:
regex = "([\w-]){33}|([\w-]){19}"
match = re.search(regex,url)
Google drive использует 33 символа для обычных дисков и 19 символов для командных дисковДругой подход без использования фиксированной длины, но вместо этого предшествующих паттернов:
regex = "(?<=/folders/)([\w-]+)|(?<=%2Ffolders%2F)([\w-]+)|(?<=/file/d/)([\w-]+)|(?<=%2Ffile%2Fd%2F)([\w-]+)|(?<=id=)([\w-]+)|(?<=id%3D)([\w-]+)"
match = re.search(regex,url)coderoad.ru
Самый простой способ получить файл ID из URL на Google Apps Script
- CodeRoad
- CodeRoad
DriveApp действительно отсутствует getFileByUrl (а также папка, если на то пошло). Возможно, вам захочется открыть запрос на улучшение в трекере проблем сценариев приложений . Но то, что я делаю в...
Forwarded from DidacticСardsBot
Как проверить, редактирует ли текущее сообщение ответ или новый ответ
Источник:
В событии отправки формы Google Form нет поля, которое могло бы помочь узнать, является ли ответ новым или измененным ответом. Как уже сказал Сэнди в комментариях к вопросам, классы и методы Form Servicer, а также значения ответов не включают в себя что-то, что могло бы помочь в этом.
Вышеупомянутое можно использовать для обновления столбца, в котором будет храниться счетчик версий. Если соответствующая ячейка пуста, то ответ представляет собой новый ответ, в противном случае - это изменение ответа.
Следующий сценарий должен быть привязан к электронной таблице, которая получает ответы формы. Для этого требуется устанавливаемый триггер отправки формы. Другие инструкции по его адаптации включены в комментарии к сценарию.
••••••••••
Обсудить:
Источник:
В событии отправки формы Google Form нет поля, которое могло бы помочь узнать, является ли ответ новым или измененным ответом. Как уже сказал Сэнди в комментариях к вопросам, классы и методы Form Servicer, а также значения ответов не включают в себя что-то, что могло бы помочь в этом.
function onFormSubmit(e){
var response = e.range;
Logger.log(response.getRow());
}Вышеупомянутое можно использовать для обновления столбца, в котором будет храниться счетчик версий. Если соответствующая ячейка пуста, то ответ представляет собой новый ответ, в противном случае - это изменение ответа.
Следующий сценарий должен быть привязан к электронной таблице, которая получает ответы формы. Для этого требуется устанавливаемый триггер отправки формы. Другие инструкции по его адаптации включены в комментарии к сценарию.
/*
*
* Global Variables
*
*/
/*
* Sheet name used as destination of the form responses
*/
var sheetName = 'Form Responses';
/*
* Name of the column to be used to hold the response revision counter
* It should match exactly the header of the related column,
* otherwise it will do nothing.
*/
var revisionsColumn = 'Rev';
/*
* Responses starting row
*/
var startRow = 2;
function setRevisionCounts(e){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
var revisionsIndex = headers[0].indexOf(revisionsColumn);
var data = sheet.getDataRange().getValues();
var response = e.range;
var rowIndex = response.getRow()-1;
var rev = data[rowIndex][revisionsIndex]+1;
sheet.getRange(rowIndex+1, revisionsIndex+1).setValue(rev);
}••••••••••
Обсудить:
Stack Overflow
How to check if current submission is editing response or a new response
I am working with google forms via app script. I want to determine if the current form that is being submitted is in edit mode or a new response? How can I check this in the onSubmit event.
If ye...
If ye...
6 Fixes to Google Drive Unable to Open File at This Time
https://www.cbackup.com/articles/google-drive-unable-to-open-file.html
https://www.cbackup.com/articles/google-drive-unable-to-open-file.html
Cbackup
6 Fixes to Google Drive Unable to Open File at This Time
Get Google Drive “Unable to open file at this time” error? Read this article to learn 6 solutions to solve the Google Drive files not opening issue quickly.
image_2021-09-08_10-14-09.png
21.8 KB
Меня постигла печаль...
Что ж будем бороться...
Что ж будем бороться...
Forwarded from Volond Apps (volond)
/*
Использование функций генератора JavaScript для диапазонов
Создание генератора диапазонов,подобного диапазонам Python или Ruby
*/
Использование функций генератора JavaScript для диапазонов
Создание генератора диапазонов,подобного диапазонам Python или Ruby
*/
const range = (end, start = 0, step = 1) => {
function* generateRange() {
let x = start - step;
while(x < end - step) yield x += step;
}
return {
[Symbol.iterator]: generateRange
};
}
console.log([...range(7)]); // [0, 1, 2, 3, 4, 5, 6]
for (let i of range(8, 2, 2)) console.log(i); // Logs: 2, 4, 6
#JS #function #array
Volond Apps
/* Использование функций генератора JavaScript для диапазонов Создание генератора диапазонов,подобного диапазонам Python или Ruby */ const range = (end, start = 0, step = 1) => { function* generateRange() { let x = start - step; while(x <…
Forwarded from Google Таблицы
Небольшая статья про api, cookie, авторизацию на минималках
Когда вы вводите свой логин и пароль на сайте через браузер – вы получаете cookie, cookie помогают при перезагрузке страницы или при входе через некоторое время не авторизовываться заново, а использовать уже созданную сессию.
В материале от Романа Игнатова простой пример того, как на сайте без API через GAS-скрипты можно получить cookie и дальше использовать их открывая страницы, которые доступны только после авторизации пользователям.
Кажется, что это первый материал на эту тему на русском 🔥
ignatov-script.blogspot.com/2021/09/api.html
P. S. "Авторизовываться", с помощью логина и пароля в этом примере не требуется, но если для вашего сайта это необходимо – формируйте post-запрос на страницу авторизации, в payload передавайте логин и пароль и забирайте cookie уже из headers этого запроса
Когда вы вводите свой логин и пароль на сайте через браузер – вы получаете cookie, cookie помогают при перезагрузке страницы или при входе через некоторое время не авторизовываться заново, а использовать уже созданную сессию.
В материале от Романа Игнатова простой пример того, как на сайте без API через GAS-скрипты можно получить cookie и дальше использовать их открывая страницы, которые доступны только после авторизации пользователям.
Кажется, что это первый материал на эту тему на русском 🔥
ignatov-script.blogspot.com/2021/09/api.html
P. S. "Авторизовываться", с помощью логина и пароля в этом примере не требуется, но если для вашего сайта это необходимо – формируйте post-запрос на страницу авторизации, в payload передавайте логин и пароль и забирайте cookie уже из headers этого запроса
Вопрос
Добрый день. В ячейке стоит следующая формула =23+45+76+87+98. Как в другой ячейке вывести количество чисел? 5. Пробовал LEN. Работает только с текстами, к сожалению. =1+LEN(C15)-LEN(SUBSTITUTE(C15;"+";"")) - не работает
Ответ
Добрый день. В ячейке стоит следующая формула =23+45+76+87+98. Как в другой ячейке вывести количество чисел? 5. Пробовал LEN. Работает только с текстами, к сожалению. =1+LEN(C15)-LEN(SUBSTITUTE(C15;"+";"")) - не работает
Ответ
=COUNTA(split(FORMULATEXT(B49);"+-*/";1;true))Поделиться или Позвонить в СоцСетях через Ссылку
Таблица
Таблица
Google Docs
Поделиться или Позвонить в СоцСетях через Ссылку
Все
Текст Ссылки,Что шарим,baseURL,Кликабельная ссылка
<div class="col-md-12" style="margin: 50px 20px 50px 20px;">
<div class="share-btns">
<a class="mail" onclick="var wnd = window.open('mailto:?subject=Ссылка, сохраненная в SYNAPS&body=' + global_share_url…
Текст Ссылки,Что шарим,baseURL,Кликабельная ссылка
<div class="col-md-12" style="margin: 50px 20px 50px 20px;">
<div class="share-btns">
<a class="mail" onclick="var wnd = window.open('mailto:?subject=Ссылка, сохраненная в SYNAPS&body=' + global_share_url…
Forwarded from DidacticСardsBot
Авторизация в Google Apps Script
Источник:
В 99% случаев авторизация в скрипте Google Apps чрезвычайно проста. Когда пользователь выполняет свой сценарий, он запускает его как себя с соответствующими областями авторизации. Исключения составляют:
Устанавливаемые триггеры, запускаемые от имени их автора
Веб-приложения, которые также могут запускаться от имени их автора в зависимости от настроек развертывания.
Однако что, если вам нужно предоставить своему приложению больше прав, чем те, которые будут иметь ваши предполагаемые пользователи?
••••••••••
Обсудить:
Источник:
В 99% случаев авторизация в скрипте Google Apps чрезвычайно проста. Когда пользователь выполняет свой сценарий, он запускает его как себя с соответствующими областями авторизации. Исключения составляют:
Устанавливаемые триггеры, запускаемые от имени их автора
Веб-приложения, которые также могут запускаться от имени их автора в зависимости от настроек развертывания.
Однако что, если вам нужно предоставить своему приложению больше прав, чем те, которые будут иметь ваши предполагаемые пользователи?
••••••••••
Обсудить:
Medium
How to Use Service Accounts and OAuth2 in Google Apps Script
Give your scripts privileges that your users don’t have.