uk
Feedback
Volond Apps

Volond Apps

Відкрити в Telegram

Программирование для души и от лени Добро пожаловать! У нас есть отличное сообщество любителей Excel и VBA, Google Sheet и Google Apps Script, а также всех тех, кто готов работать с этим программным обеспечением. Присоединяйтесь к нам, чтобы задавать и от

Показати більше
246
Підписники
Немає даних24 години
Немає даних7 днів
Немає даних30 день
Архів дописів
LocalLogger позволяет: Записывать логи в выделенный лист таблицы с метками времени и уровнями важности Настрaивать пороговый
LocalLogger позволяет: Записывать логи в выделенный лист таблицы с метками времени и уровнями важности Настрaивать пороговый уровень для отправки email-уведомлений Автоматически форматировать логи разными цветами в зависимости от уровня важности Добавлять информацию о пользователе в логи

Считаем переходящее время Формат ячейки длительность =if(and(C4<>"";D4<>""); if(C4
Считаем переходящее время Формат ячейки длительность
=if(and(C4<>"";D4<>""); if(C4<D4;(today()+D4)-(today()+C4);(today()+D4+1)-(today()+C4));)

Google Sheets API не работает с датами JS. Вообще никто нормальный с датами JS работать не должен. Я, например, очень рад, что освоил этот странный объект 🤪 Очень похоже на Жемалистовое дерево 😉 Так вот, даты в Таблицах - числа, и это не все комбо, еще Таблицы позволяют USER_ENTERED — это когда даты сначала еще и строки. Для "легкого ввода" используйте текст. Но если сильно нужно конвертировать даты в числа Таблиц и обратно в Apps Script, то я пользуюсь этим Туда

 function toGoogleSheetsDateNumber(date, timezoneOffset) {
    const _date = new Date(date);
    timezoneOffset = timezoneOffset || _date.getTimezoneOffset();
    const _start = new Date(Date.UTC(1899, 11, 30, 0, 0, 0, 0));
    return ((_date.getTime() - _start.getTime()) / 60000 - timezoneOffset) / 1440;
  }
Обратно
 function fromGoogleSheetsDateNumber(number, timezoneOffset) {
    const intPart = Math.floor(number);
    const fracPart = number - intPart;
    timezoneOffset = timezoneOffset || new Date().getTimezoneOffset();
    const time = Math.round(fracPart * 24 * 60 * 60 * 1000) + timezoneOffset * 60000;
    const date = new Date(Date.UTC(1899, 11, 30 + intPart) + time);
    return date;
  }
Полезная ссылка https://stackoverflow.com/questions/57360205/how-to-convert-a-js-date-programmatically-into-a-google-sheet-serial-number-an

Repost from Провод
Плагин, который красиво отформатирует твой код и сделает его понятнее и последовательнее. Позволяет сортировать разные данные
Плагин, который красиво отформатирует твой код и сделает его понятнее и последовательнее. Позволяет сортировать разные данные: объекты, импорты, типы TypeScript, перечисления, свойства JSX, атрибуты Svelte и т.д. Всё это упрощает совместную работу и делает код визуально привлекательным и гармоничным. Найти репозиторий можно тут. @begincode

Validate Phone Numbers with Javascript & HTML Проверка номера телефона очень важна для вашего бизнеса. Это позволяет вам проверить информацию от клиентов и убедиться, что вы имеете дело с реальным клиентом. Кроме того, это поможет вам эффективно расширить охват. В этом посте вы найдете подробную информацию о проверке номера телефона с помощью JavaScript и HTML. »

 javaScript
//запустим наш скрипт через 30 сек
function doGet(e) {
   try {
  ScriptApp.newTrigger('takeScreenshotAndUpload1')
      .timeBased()
      .after(30000)
      .create();
  

   } catch (error) {
     
   }
}
// Эту функцию нужно натравим на изменяемые данные
// и впишем в нее url опубликованого как webhook скрипта
function fetch(d=""){
return UrlFetchApp.fetch("https://script.google.com/macros/s/AKfycbz5WoZSUTVNqYEK0PCRjjppLNoqSv9b6JWeKLhsscPP_pbVX7iED6uTetxX9k8y3PGz/exec")
}

function takeScreenshotAndUpload1(e){
  //Тут какая-то логика
  ScriptApp.getProjectTriggers().forEach(trigger => {
    if (trigger.getHandlerFunction() === 'takeScreenshotAndUpload1') {
      trigger.delete();
    }
  })
}

https://carbon.now.sh/?bg=rgba%28171%2C+184%2C+195%2C+1%29&t=panda-syntax&wt=none&l=auto&width=680&ds=true&dsyoff=20px&dsblur=68px&wc=true&wa=true&pv=56px&ph=56px&ln=false&fl=1&fm=Hack&fs=14px&lh=133%25&si=false&es=2x&wm=false&code=%252F%252F%25D0%25B7%25D0%25B0%25D0%25BF%25D1%2583%25D1%2581%25D1%2582%25D0%25B8%25D0%25BC%2520%25D0%25BD%25D0%25B0%25D1%2588%2520%25D1%2581%25D0%25BA%25D1%2580%25D0%25B8%25D0%25BF%25D1%2582%2520%25D1%2587%25D0%25B5%25D1%2580%25D0%25B5%25D0%25B7%252030%2520%25D1%2581%25D0%25B5%25D0%25BA%250Afunction%2520doGet%28e%29%2520%257B%250A%2520%2520%2520try%2520%257B%250A%2520%2520ScriptApp.newTrigger%28%27takeScreenshotAndUpload1%27%29%250A%2520%2520%2520%2520%2520%2520.timeBased%28%29%250A%2520%2520%2520%2520%2520%2520.after%2830000%29%250A%2520%2520%2520%2520%2520%2520.create%28%29%253B%250A%2520%2520%250A%250A%2520%2520%2520%257D%2520catch%2520%28error%29%2520%257B%250A%2520%2520%2520%2520%2520%250A%2520%2520%2520%257D%250A%257D%250A%252F%252F%2520%25D0%25AD%25D1%2582%25D1%2583%2520%25D1%2584%25D1%2583%25D0%25BD%25D0%25BA%25D1%2586%25D0%25B8%25D1%258E%2520%25D0%25BD%25D1%2583%25D0%25B6%25D0%25BD%25D0%25BE%2520%25D0%25BD%25D0%25B0%25D1%2582%25D1%2580%25D0%25B0%25D0%25B2%25D0%25B8%25D0%25BC%2520%25D0%25BD%25D0%25B0%2520%25D0%25B8%25D0%25B7%25D0%25BC%25D0%25B5%25D0%25BD%25D1%258F%25D0%25B5%25D0%25BC%25D1%258B%25D0%25B5%2520%25D0%25B4%25D0%25B0%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B5%250A%252F%252F%2520%25D0%25B8%2520%25D0%25B2%25D0%25BF%25D0%25B8%25D1%2588%25D0%25B5%25D0%25BC%2520%25D0%25B2%2520%25D0%25BD%25D0%25B5%25D0%25B5%2520url%2520%25D0%25BE%25D0%25BF%25D1%2583%25D0%25B1%25D0%25BB%25D0%25B8%25D0%25BA%25D0%25BE%25D0%25B2%25D0%25B0%25D0%25BD%25D0%25BE%25D0%25B3%25D0%25BE%2520%25D0%25BA%25D0%25B0%25D0%25BA%2520webhook%2520%25D1%2581%25D0%25BA%25D1%2580%25D0%25B8%25D0%25BF%25D1%2582%25D0%25B0%250Afunction%2520fetch%28d%253D%2522%2522%29%257B%250Areturn%2520UrlFetchApp.fetch%28%2522https%253A%252F%252Fscript.google.com%252Fmacros%252Fs%252FAKfycbz5WoZS*******8y3PGz%252Fexec%2522%29%250A%257D%250A%250Afunction%2520takeScreenshotAndUpload1%28e%29%257B%250A%2520%2520%252F%252F%25D0%25A2%25D1%2583%25D1%2582%2520%25D0%25BA%25D0%25B0%25D0%25BA%25D0%25B0%25D1%258F-%25D1%2582%25D0%25BE%2520%25D0%25BB%25D0%25BE%25D0%25B3%25D0%25B8%25D0%25BA%25D0%25B0%250A%2520%2520ScriptApp.getProjectTriggers%28%29.forEach%28trigger%2520%253D%253E%2520%257B%250A%2520%2520%2520%2520if%2520%28trigger.getHandlerFunction%28%29%2520%253D%253D%253D%2520%27takeScreenshotAndUpload1%27%29%2520%257B%250A%2520%2520%2520%2520%2520%2520trigger.delete%28%29%253B%250A%2520%2520%2520%2520%257D%250A%2520%2520%257D%29%250A%257D

=byrow(A2:A100;lambda(ss;JOIn("|";ifna(filter($N$2:$N$7;BYROW($M$2:$M$7;lambda(s;REGEXMATCH(ss;".*"&s&".*"))));""))))
 =byrow(A2:A100;lambda(ss;JOIn("|";ifna(filter($N$2:$N$7;BYROW($M$2:$M$7;lambda(s;REGEXMATCH(ss;".*"&s&".*"))));""))))

ToDo – Formula Parsing – OpenSolver for Excel https://opensolver.org/to-do/todo-formula-parsing/

HyperFormula guide | HyperFormula (v2.6.0) https://hyperformula.handsontable.com/#what-is-hyperformula

 javaScript
/**
 * Функция `renameME` предназначена для переименования файла Google Sheets документа,
 * добавляя текущую дату и время в новое имя файла.
 *
 * @param {GoogleAppsScript.Spreadsheet.Spreadsheet|string} [ss=''] - Необязательный параметр. 
 * Ссылка на объект Google Sheets документа (или его идентификатор) для переименования.
 * Если параметр не указан, будет использован активный документ.
 */

function renameME(ss='') {
  ss=ss||SpreadsheetApp.getActive();
  var nameDate=ss.getName();
  var [name,date,time]=nameDate.split("|");
  var d=new Date()
  const time24Hr = convertTo24HourFormat();
  var newName=name+"|"+[d2s(d,"dd-MM-yy"),time24Hr].join("|");
  ss.setName(newName);
  
}