• Как добавить пробелы и скобки в формулу?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    К сожалению, интерпретатор регулярных выражений, на котором основана эта программа, не поддерживает вложенные вызовы. Поэтому необходимо самостоятельно распарсить строку и соединить ее как надо.

    ="Итого с учетом всего : " & TEXT(D8;"#,##0.00") & REGEXREPLACE(
      MONEYTEXT(D8;"RUB") & " ноль копеек ";
      "(.*)\s(руб[а-я]+)(.*?)(коп[а-я]+)(.*)";
      " ($1) $2 " & TEXT(ROUND(MOD(D8;1);2)*100;"00") & " $4"
    )


    6022a4496d118990363140.png

    Замечание. Представление текста валют обусловлено общим форматом интерпретатора и видением группы разработчиков и не поддерживает никаких банковских или других стандартов. Основная причина - отсутствие поддержки в развитии продукта. Времени и сил хватает только на исправление багов.


    Обновлено

    Подсказывают https://t.me/googleappsscriptrc/35292 чуть более гуманную для человеческих глаз формулу для получения числа копеек

    ="Итого с учетом всего : " & D8 & " " & REGEXREPLACE(
      MONEYTEXT(D8; "RUB");
      "(.*?)\s(руб[а-я]{0,})[\s].*?(коп[а-я]{0,})";
      "($1) $2 " & REGEXEXTRACT("" & D8;",(\d{2})") & " $3"
    )
    Ответ написан
  • Как сгенерить md5 строку на Google Script?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Здравствуйте.

    Мне кажется, что у вас неполные представления о методах Google Apps Script, алгоритмах хэширования и системах исчисления.

    Во-первых, computeDigest возвращает массив Byte[], что он и должен делать.
    Во-вторых, вам просто его надо "преобразовать в 16-ричную хэш строку", как сказано выше.

    Попробуйте сделать так:

    function test(){
      Logger.log(toMD5('56'));
    }
    const toMD5 = function(charset, toByte) {
      charset = charset || Utilities.Charset.UTF_8;
      var digest = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, this, charset);
      if(toByte) return digest;
      var __ = '';
      for (i = 0; i < digest.length; i++) {
        var byte = digest[i];
        if (byte < 0) byte += 256;
        var bStr = byte.toString(16);
        if (bStr.length == 1) bStr = '0' + bStr;
        __ += bStr;
      }
      return __;
    }
    Ответ написан
    Комментировать
  • Как при выборе значения из выпадающего списка выводить соответствующий текст в соседнюю ячейку?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Это делает формула VLOOKUP

    =INDEX(IFERROR(VLOOKUP(A:A;'Данные'!A:B;2;)))

    Пример в Таблице https://docs.google.com/spreadsheets/d/1pV_uC-CORb...

    60f4e051dbea3489406918.gif
    Ответ написан
    Комментировать
  • Как извлечь текст из строки?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    В Таблицах часто используют REPT для генерации выражения REGEXEXTRACT

    =INDEX(JOIN(",";
      REGEXEXTRACT(
        B2;
        REPT(".*/(\d+)";COUNTA(SPLIT(B2;"Руб";0))-1)
      ) & "см"
    ))


    6090860d4fcf8248486011.png
    Ответ написан
    1 комментарий
  • Как найти файлы которых нет, имея списки?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Попробуйте формулу FILTER для списков, которых нет в других списках

    Данные, которые отсутствуют в заданном списке
    • A:A - должны были сгенерироваться
    • B:B - сгенерировались

    =FILTER(A:A;ISNA(MATCH(A:A;B:B;0)))

    См. примеры https://oshliaer.github.io/qna?target=post/google-...
    Ответ написан
    5 комментариев
  • Как переименовать файлы шрифтов в их оригинальные названия?

    wisgest
    @wisgest
    Не ИТ-специалист
    Можно переименовать, например, на VBScript, используя для получения свойств файла методы объекта Shell.Application:ExtendedProperty или GetDetailsOf. Для первого надо знать текстовое наименование свойства, его узнать у меня пока не получилось, да и не всегда оно есть. Для второго —числовой индекс, его можно узнать опытным путём, у меня получилось 21, но на других машинах может быть другое число.

    Дело не пошло со шрифтами с расширением FON (растровыми?): у них значение найденного мной свойства не отличается для разновидностей шрифта в разных файлах. Но со шрифтами True Type (расширение TTF) что-то получилось. Впрочем, в случае, когда имя отличается лишь регистром, я переименовывать не стал, так как тогда возникает ошибка «Файл уже существует».
    Const PROPERTY_INDEX = 21
    	' ВНИМАНИЕ:
    	' Индес PROPERTY_INDEX свойства, содержащего название шрифта,
    	' определён опытным путём
    	' <http://forum.script-coding.com/viewtopic.php?id=38>
    	' и зависит от установленного программного обеспечения!!!
    
    Set Shell = CreateObject("Shell.Application")
    
    Const BIF_RETURNONLYFSDIRS = &H1
    Const BIF_EDITBOX = &H10
    Const BIF_NONEWFOLDERBUTTON = &H200
    Do
    	Set Folder = Shell.BrowseForFolder(0, WScript.ScriptName, _
    		BIF_RETURNONLYFSDIRS Or BIF_EDITBOX Or BIF_NONEWFOLDERBUTTON)
    	If Folder Is Nothing Then WScript.Quit
    	If Folder.Self.Path = Shell.NameSpace("shell:Fonts").Self.Path Then
    		MsgBox "C системной папкой шрифтов не работает!", _
    			vbExclamation, WScript.ScriptName
    	Else
    		Exit Do
    	End If
    Loop
    
    Set FolderItems = Folder.Items()
    Count = FolderItems.Count
    Redim Items(Count - 1)
    For I = 0 to Count - 1
    	Set Items(I) = FolderItems.Item(I)
    Next
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    For Each Item In Items
    	Path = Item.Path
    	ExtensionName = FSO.GetExtensionName(Path)
    	If UCase(ExtensionName) = "TTF" Then
    		FontTitle = Folder.GetDetailsOf(Item, PROPERTY_INDEX)
    		If UCase(FontTitle) <> UCase(FSO.GetBaseName(Path)) Then
    			OldName = FSO.GetFile(Path).Name
    			NewName = FontTitle & "." & ExtensionName
    			On Error Resume Next
    			FSO.GetFile(Path).Name = NewName
    			If Err Then MsgBox _
    				OldName & " => " & NewName & vbNewLine & _
    				Err.Description, vbExclamation, WScript.ScriptName
    			On Error GoTo 0
    		End If
    	End If
    Next
    MsgBox "Конец.", vbInformation, WScript.ScriptName
    Ответ написан
    Комментировать
  • Как переименовать файлы шрифтов в их оригинальные названия?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Попробуйте с помощью Тотал коммандер, у него по моему есть команда массового переименования в том числе и по мета атрибутам
    Ответ написан
    3 комментария
  • Как делать такие (анимации ?) на сайте?

    Simply1993
    @Simply1993
    Frontend developer
    Наверно нужно почитать про canvas, webGL, шейдеры, Three.js и всё в этом духе :)
    Ответ написан
    3 комментария
  • CMD/BAT - Пакетное переименование файлов(.jpg) в разных папках (BAT)?

    @res2001
    Developer, ex-admin
    Примерно так:
    @echo off
    setlocal enabledelayedexpansion
    for /d %%a in (*) do (
      set "count=1"
      for %%b in ("%%~a\*.jpg") do (
         ren "%%~b" "%%~na_!count!%%~xb"
         set /a "count=!count! + 1"
      )
    )

    Сейчас под рукой винды нет - протестировать не могу.
    Никаких файлов со списком папок не требуется. Скрипт проверяет все подпапки в текущей папке и переименовывает все jpg
    Ответ написан
    6 комментариев