как на VBA запаковать файл в zip архив (ексель) #268840


#0 by крутойкодер
пример кода был бы кстати
#1 by Voffka
Сначало: Set Shell  = WScript.CreateObject("WScript.Shell") и запускаешь винрар: Shell.Run("C:Program FilesWinRARWinRAR.exe ключи и все остальные параметры",1,True)
#2 by Specky
нахера такие сложности? просто Shell(pathname[,windowstyle]) для любителей Win32 - Declare Function CreateProcess...
#3 by smaharbA
Лажа
#4 by Андрюха
Что есть не лажа, учитель?
#5 by smaharbA
не прикалывайся )) если ОС начиная с Ме, то все будет работать как с обычной папкой через Shell.Application, только одно сперва надо для нового файла создать первые 22 байта, а там уж пиши в него как в папку
#6 by Андрюха
Можно по-подробнее???
#7 by smaharbA
Код 1С пойдет ? В скрипте или екселе еще просче получится, "летающие листики" можно скрыть будет
#8 by DES
Ух ты ! Класс! А как прочитать из ZIP-архива текстовый файл таким же макаром ?
#9 by Андрюха
Круть!
#10 by smaharbA
Да, тупа работаешь как с папкой Ну чтобы не выдергивать его из архива, а прямо читать в 1с придется поизвращаться, а в скрипте или в ВБА все просто все теже for each f in fold.items(0 и ParseName и прочее
#11 by DES
А можно код в 1С изобразить, всетки?
#12 by Андрюха
+1
#13 by DES
Вот что получилось: Скрипт.Eval("Файл.Write(String.FromCharCode(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))"); {Обработка.ПримерРаботыС_ZIP.Форма.Модуль}: Ошибка выполнения Microsoft JScript: Объект не поддерживает это свойство или метод
#14 by smaharbA
это джаба скрипт, регистр буков имеет большое значение ... Примерно так Башка болит, правдо тяжело...
#15 by DES
Сорри, но ... Папка=Шел.namespace(Архив+" mp"); {Обработка.ПримерРаботыС_ZIP.Форма.Модуль}: Плохой тип переменной
#16 by smaharbA
там дело в том, что идет асинхронное копирование в ЗИП, и если много всего, то само сабой при коде типа нарвешься на , но если всеже надо так, то в цикле ожидания надо проверять запоковалось уже все или нет, проверять тупа по изменению размера файла или лучче по наличию или отсутствию ошибки типа а пока, попробуй разделить код на "Упаковать" и "Просмотреть содержимое"
#17 by DES
Еще раз сорри, а где начинается "Просмотреть содержимое" Ибо все равно
#18 by smaharbA
[1C] //******************************************* Процедура Сформировать    Архив="c: empМоя новая папка.zip";    Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");    Скрипт.language="javascript";    ФСО=СоздатьОбъект("scripting.filesystemobject");    Файл=ФСО.opentextfile(Архив,2,-1);    Скрипт.AddObject("Файл",Файл);    Скрипт.Eval("Файл.write(String.fromCharCode(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))");    Файл.Close;    Шел=СоздатьОбъект("shell.application");    Папка=Шел.namespace(Архив);    Папка.copyhere("c: emp mp");    Стр="Создаем архив - "+Архив;    Пока (ВвестиСтроку(Стр,Стр,СтрДлина(Стр),0,1)<>0) и (ФС.СуществуетФайл(Архив)=0) Цикл    КонецЦикла; КонецПроцедуры //******************************************* Функция Просмотр(Путь="")    Архив="c: empМоя новая папка.zip";    Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");    Скрипт.language="javascript";    Шел=СоздатьОбъект("shell.application");    Папка=Шел.namespace(Архив+""+Путь);    Скрипт.AddObject("Папка",Папка);    Вложения=Скрипт.Eval("new Enumerator(Папка.Items)");    Пока Вложения.atEnd=0 Цикл        Сообщить(Вложения.item.path);        Если Вложения.item.IsFolder=-1 Тогда            Просмотр(Вложения.item.path);        КонецЕсли;        Вложения.moveNext;    КонецЦикла; КонецФункции [/1C] Просто в том примере я просматривал наверняка имеющуюся в архиве папку tmp, а тут с рекурсией весть архив от его "корня"
#19 by smaharbA
Бошка трещит, не буду больше вино пить...
#20 by крутойкодер
нужен код на VBA ексель есть 1с у них нету
#21 by FreeFin
Тут возьми:
#22 by smaharbA
#23 by DES
сорри. занялся на досуге... а как же все-таки прочитать текстовый файл построчно из ZIP-архива как из папки ?
#24 by DES
smaharbA   HELP !
#25 by smaharbA
пока некогда пример сделать, я в печали - (чуть позже, там всамделе то он всеравно распакует, но какбы не явно)
#26 by DES
THX ! Подождем ...
#27 by DES
Ну, развеял печали ?
#28 by Звездочёт
круто :) работает, однако ;)
#29 by Звездочёт
А что, параметр vOptions в скриптах не работает? :/ Вроде написано, что можно указывать числовые значения... Syntax: Folder.CopyHere(vItem [, vOptions]) vOptions: ... These flags are not defined as such for Microsoft® Visual Basic®, Visual Basic Scripting Edition (VBScript), or Microsoft JScript®, so you must define them yourself or use their numeric equivalents. ... 4 - Do not display a progress dialog box.   ...
#30 by DES
Учитель , уже можете думать ?
#31 by DES
Hey
#32 by smaharbA
[1C] //******************************************* Процедура Сформировать    Архив="c: empМоя новая папка.zip";    Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");    Скрипт.language="javascript";    ФСО=СоздатьОбъект("scripting.filesystemobject");    Файл=ФСО.opentextfile(Архив,2,-1);    Скрипт.AddObject("Файл",Файл);    Скрипт.Eval("Файл.write(String.fromCharCode(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))");    Файл.Close;    Шел=СоздатьОбъект("shell.application");    Папка=Шел.namespace(Архив);    Папка.copyhere("c: emp mp");    Стр="Создаем архив - "+Архив;    Пока (ВвестиСтроку(Стр,Стр,СтрДлина(Стр),0,1)<>0) и (ФС.СуществуетФайл(Архив)=0) Цикл    КонецЦикла; КонецПроцедуры //******************************************* Функция ПросмотрРекурс(Архив="",Путь="",Сп)    Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");    Скрипт.language="javascript";    Шел=СоздатьОбъект("shell.application");    Папка=Шел.namespace(Архив+""+Путь);    Скрипт.AddObject("Папка",Папка);    Вложения=Скрипт.Eval("new Enumerator(Папка.Items)");    Пока Вложения.atEnd=0 Цикл        Сп.ДобавитьЗначение(Вложения.item.path);        Если Вложения.item.IsFolder=-1 Тогда            ПросмотрРекурс(Архив,Вложения.item.path,Сп);        КонецЕсли;        Вложения.moveNext;    КонецЦикла; КонецФункции Функция Просмотр    Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");    Скрипт.language="javascript";    Архив="c: empМоя новая папка.zip";    Путь="tmp";    Сп=СоздатьОбъект("СписокЗначений");    ПросмотрРекурс(Архив,Путь,Сп);    СпВыб=СоздатьОбъект("СписокЗначений");    Для к=1 По Сп.РазмерСписка Цикл        ПутьФайла=Сп.ПолучитьЗначение(к);        Расширение=СтрЗаменить(ПутьФайла,".","        |");        Расширение=СтрПолучитьСтроку(Расширение,СтрКоличествоСтрок(Расширение));        Расширение=?(Расширение=ПутьФайла,"",Расширение);        Если Расширение="vbs" Тогда            Шел=СоздатьОбъект("Shell.Application");            Папка=Шел.NameSpace(Архив);            Файл=Папка.ParseName(ПутьФайла);            Темп=Шел.NameSpace(КаталогВременныхФайлов);            ФС.УдалитьФайл(КаталогВременныхФайлов+СтрЗаменить(Файл.path,"/",""));            Темп.CopyHere(Файл);            СпВыб.ДобавитьЗначение(КаталогВременныхФайлов+СтрЗаменить(Файл.path,"/",""));        КонецЕсли;    КонецЦикла;    Текст=СоздатьОбъект("Текст");    Для к=1 По СпВыб.РазмерСписка Цикл        Текст.Открыть(СпВыб.ПолучитьЗначение(к));        Сообщить("<<----"+СпВыб.ПолучитьЗначение(к)+"---->>");        Для н=1 По Текст.КоличествоСтрок Цикл            Сообщить(Текст.ПолучитьСтроку(н));        КонецЦикла;        Сообщить("<<-------->>");        Текст.Очистить;        ФС.УдалитьФайл(СпВыб.ПолучитьЗначение(к));    КонецЦикла; КонецФункции    // Просмотр [/1C]
#33 by smaharbA
Конечно это распаковка, чтобы внутри смотреть надо ИЕ задействовать, но и ИЕ всеравно всамделе-то распаковывает...
#34 by Voffka
Вместо двух строк ты стока хни написал... жуть... а то что ниже пошло - просто жесть, даже читать не стал..
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С