Страницы: 1
RSS
Замена формата файла в выгрузке
 
Всем добрый день, подскажите плз как решить вопрос, имеется макрос на выгрузку, который выгружает файлы в таком формате (во вложении)
Соответственно нужно, чтобы формат в конце менялся на читабельный типа ".pdf", ".rar" и т.д. Пытался сделать через уже готовое решение по замене символов, но что-то пошло не так( + данное решение не будет учитывать 4 символа формата, типа docx, xlsx. Решение наверняка простое , но что-то ничего не лезет в голову
Код
Function Replace_format(ByVal txt As String) As String
    St$ = "pdf,doc,xls,zip,rar"
        For i% = 1 To Len(St$) Step 3
        txt = Replace(txt, Mid(St$, i, 3), "." & Mid(St$, i, 3))
        Next
    'txt = Replace(txt, ChrW(774), "")
    Replace_symbols = txt
End Function
Изменено: vikttur - 26.07.2021 13:01:59
 
По идеи, просто поменяв расширение файла вы не меняете сам формат файла (его структуру). Вы не можете взять Word файл (docx) поменять расширение на jpg и получить картинку.
Надо дописать в ваш макрос, который создаёт файлы ещё точку перед расширением
Изменено: New - 26.07.2021 14:52:21
 
Цитата
New написал:
Надо дописать в ваш макрос, который создаёт файлы ещё точку перед расширением
Ну, а если не надо, то можно так
Код
Function Replace_format_3(ByVal txt As String) As String
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Pattern = "pdf|doc(x|m)?|xls(x|m|b)?|zip|rar"
    objRegExp.Global = True
    If objRegExp.Test(RTrim(txt)) Then Set objMatch = objRegExp.Execute(RTrim(txt)).Item(objRegExp.Execute(RTrim(txt)).Count - 1) Else Exit Function
    If Not objMatch.Length = Len(RTrim(txt)) - objMatch.FirstIndex Then Exit Function
    Replace_format_3 = Left(RTrim(txt), objMatch.FirstIndex) & "." & Right(RTrim(txt), Len(RTrim(txt)) - objMatch.FirstIndex)
End Function
или так
Код
Function Replace_format_2(ByVal txt As String) As String
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Pattern = "pdf |doc(x|m)? |xls(x|m|b)? |zip |rar "
    txt1 = Right(txt, 5) & " "
    If objRegExp.Test(txt1) Then Set objMatches = objRegExp.Execute(txt1) Else Exit Function
    Replace_format_2 = Left(txt, Len(txt) - 5) & RTrim(objRegExp.Replace(txt1, "." & objMatches.Item(0)))
End Function
А чтобы работала Ваша функция замените Replace_symbols = txt на Replace_format = txt
Изменено: msi2102 - 26.07.2021 15:40:58
 
Ну, регулярки для такой задачи слишком мощно. Достаточно такого:
Код
Function Replace_format(ByVal txt As String,sNewFormat$) As String
dim lp&,s$
lp = instrrev(txt, ".")
s = mid(txt,1,lp)
Replace_format = s & sNewFormat
End Function
использовать так:
Код
sNewFileName = Replace_format("Книга1.doc","pdf")
но как написали выше - это сменит только отображаемое расширение файла, но не его формат.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
это сменит только отображаемое расширение файла
Я понял, что ему не надо менять формат, нужно просто поставить точку перед расширением
 
msi2102, если бы ТС нормально сформулировал проблему и/или дал внятный пример, то и вопросов бы не было
Я плюнул, так как нет желания угадывать, нужно "Добавить расширение к полному имени файла" или "Заменить существующее расширение файла на заданное"  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Я плюнул, так как нет желания угадывать
а разве это не квест 😁😁😁
 
Цитата
Я плюнул
Зачем плеваться 8-0 , у нас тут культурное сообщество вроде бы, на самом деле оба варианта подходят, тк приходится каждый раз менять расширение, вставляя точку чтобы файл "заработал"
Всем спасибо за советы, в итоге работаю с функцией, предложенной msi2102
Изменено: Zealot92 - 29.07.2021 10:56:35
Страницы: 1
Наверх