Volond Apps
رفتن به کانال در Telegram
Программирование для души и от лени Добро пожаловать! У нас есть отличное сообщество любителей Excel и VBA, Google Sheet и Google Apps Script, а также всех тех, кто готов работать с этим программным обеспечением. Присоединяйтесь к нам, чтобы задавать и от
نمایش بیشتر246
مشترکین
اطلاعاتی وجود ندارد24 ساعت
اطلاعاتی وجود ندارد7 روز
اطلاعاتی وجود ندارد30 روز
آرشیو پست ها
246
Преобразует временной формат 12-часового часового формата в 24-часовой формат.
#convert #time
javaScript
/**
*
* Этот код преобразует строку "1:41:09 PM" в "13:41:09".
* Если входная строка не соответствует формату времени 12 часов, функция вернет null.
* Преобразует временной формат 12-часового часового формата в 24-часовой формат.
*
* @param {string} [time12Hr] - Время в формате 12 часов с AM или PM (по умолчанию - текущее время).
* @return {string|null} - Время в формате 24 часа (в виде строки) или null, если входное время некорректно.
*
*/
function convertTo24HourFormat(time12Hr=new Date().toLocaleTimeString()) {
// Разбиваем строку времени на компоненты
const timeComponents = time12Hr.match(/(\d+):(\d+):(\d+) (AM|PM)/);
if (timeComponents) {
let hours = parseInt(timeComponents[1], 10);
const minutes = timeComponents[2];
const seconds = timeComponents[3];
const period = timeComponents[4];
if (period === 'PM' && hours !== 12) {
// Если это время после полудня, добавляем 12 часов
hours += 12;
} else if (period === 'AM' && hours === 12) {
// Если это полночь, устанавливаем часы в 0
hours = 0;
}
// Форматируем часы, минуты и секунды
const formattedHours = hours.toString().padStart(2, '0');
const formattedTime = `${formattedHours}:${minutes}:${seconds}`;
return formattedTime;
}
// Если ввод не соответствует формату времени 12 часов, возвращаем null
return null;
}246
Шаблон в стиле sprintf
=reduce(T2;T3:T8;LAMBDA(total;row;REPLACE(total;find("%";total;1);1;row)))246
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <array.au3>
#include <String.au3>
#include <File.au3>
$FileOpen = "Profile34.csv";
Dim $aResult
CSVParserDotComma($FileOpen)
_ArrayDisplay($aResult)
Func CSVParserDotComma($FileOpen) ; parser
Dim $aArray
;~ _FileReadToArray($FileOpen, $aArray);загоняем файл в одномерный массив построчно, в нулевом элементе число строк
If Not _FileReadToArray($FileOpen, $aArray) Then;загоняем файл в одномерный массив построчно, в нулевом элементе число строк
MsgBox(4096, "Ошибка", " Ошибка чтения файла в массив Ошибка = " & @error)
Exit
EndIf
$columnsCounter = stringsplit($aArray[1],';'); определяем эталонное количество столбцов, разделитель ';'
Dim $aResult[1][$columnsCounter[0] +1 ];объявляем из одной строки массив с уже известным количеством столбцов
ProgressOn("Загрузка ", "Ожидание...", "",-1,-1,16)
ConsoleWrite('aArray0: ' & $aArray[0] & @CRLF)
$procent = $aArray[0] / 100
For $x = 1 to ($aArray[0]);заполняем итоговый массив, строки
local $oneRow = stringsplit($aArray[$x],';'); разбиваем каждую строку в имеющемся одномерном массиве
If $oneRow[0]=$columnsCounter[0] then; если эталонное количество столбцов и текущее совпадают
_ArrayAdd($aResult, $aArray[$x], 1, ";") ;то добавляем всю строку в новый массив, начиная с 1го столбца, разделитель столбцов ";"
Else
;MsgBox(1,1,"ошибка в строке "&$x)
EndIf
ProgressSet($x / $procent, Ceiling($x / $procent) & " процентов") ; устанавливает позицию и/или текст
Next
ProgressSet(100, "Завершено", "Полностью выполнено")
ProgressOff() ; убирает окно прогресса
Return $aResult
EndFunc246
Для sqlite есть охренительные аддоны. Там можно, например xlsx или csv как виртуальную табличку к базе цеплять, юзать регулярки в запросах и еще кучу всего.
https://github.com/nalgeon/sqlean
#AutoIT
246
Связанный код hslToHex
// Based on https://stackoverflow.com/a/44134328/1393023
var hslToHex = function (h, s, l) {
var hue2rgb = function(p, q, t){
if (t < 0) t += 1;
if (t > 1) t -= 1;
if (t < 1 / 6) return p + (q - p) * 6 * t;
if (t < 1 / 2) return q;
if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
return p;
};
var toHex = function(x) {
const hex = Math.round(x * 255).toString(16);
return hex.length === 1 ? '0' + hex : hex;
};
h /= 360, s /= 100, l /= 100;
var r, g, b;
if (s === 0) {
r = g = b = l;
} else {
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
var p = 2 * l - q;
r = hue2rgb(p, q, h + 1 / 3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1 / 3);
}
return '#' + [r, g, b].map(toHex).join('');
}246
Этот скрипт на JavaScript для Google Таблиц предназначен для подсветки текста в активной ячейке радужными цветами.
Вкратце он работает так:
Получает активную в данный момент ячейку с помощью SpreadsheetApp.getActiveRange()
Берет текст из этой ячейки - cell.getValue().toString()
Создает объект richTextBuilder, куда будет записывать текст с разными стилями.
Проходится циклом по символам текста.
Для каждого символа рассчитывает радужный цвет в зависимости от позиции символа в тексте.
Создает объект стиля textStyleBuilder с нужным цветом.
Применяет стиль к текущему символу в объекте richTextBuilder.
Проверяет, что символ - это буква латинского алфавита.
В конце записывает полученный цветной текст обратно в ячейку.
Таким образом, скрипт окрашивает текст в ячейке в радугу, меняя цвет каждого символа.
javaScript
function rainbowActiveCellLat(range) {
var cell = range||SpreadsheetApp.getActiveRange();
var text = cell.getValue().toString();
var B = 'A'.charCodeAt(0);
var E = 'Z'.charCodeAt(0);
var richTextBuilder = SpreadsheetApp.newRichTextValue();
richTextBuilder.setText(text);
for (var i = 0; i < text.length; i++) {
var textStyleBuilder = SpreadsheetApp.newTextStyle();
textStyleBuilder.setForegroundColor(
hslToHex(((360 * i) / text.length) | 0, 100, 50)
);
var textStyle = textStyleBuilder.build();
console.log(text[i]+"-"+text[i].charCodeAt(0));
if (text[i].charCodeAt(0) >= B && text[i].charCodeAt(0) <= E){
richTextBuilder.setTextStyle(i, i + 1, textStyle);
}
}
var value = richTextBuilder.build();
cell.setRichTextValue(value);
}246
/**
* Copies a single row in a Google Sheets spreadsheet to the last row of the sheet.
* Копирует строку выделеной ячейки в таблице Google Sheets в последнюю строку листа
* @param {Object} range - The range object representing the row to be copied.
* @return {void} - This function does not return a value.
*/
function selectionCopyRow(range){
var ss=SpreadsheetApp.getActiveSpreadsheet()
var sheet=ss.getActiveSheet()
var row=range.getRow()
var rows=sheet.getRange(`${row}:${row}`)
var lastRow=sheet.getLastRow()+1
var copyRange=sheet.getRange(`${lastRow}:${lastRow}`)
rows.copyTo(copyRange)
}
/**
* Copies the selected rows by calling the `selectionCopyRow` function for each row.
* Копирует выбранные строки, вызывая функцию selectionCopyRow для каждой строки.
* #runSelectionAll
* @param {type} paramName - description of parameter
* @return {type} description of return value
*/
function selectionCopyRows(){
runSelectionAll(selectionCopyRow)
}246
Перенос строки в числовом формате
dddd d.mm.yyyyИcпользуеться знак < > Также можно использовать формулу
=join(char(10);split(TEXT(B1;"DDDD dd.mm.yyy");" "))246
Repost from [[PRO Obsidian]]
В тему оформления - видео про блоки callouts и как их можно кастомизировать под себя.
