Получаване на файлове от ZIP архив във VBA, Excel макроси
Функцията е предназначена да получава файлове, извлечени от ZIP архив.
Разархивирането се извършва с инструменти на Windows, файловете се извличат в специално създадена папка в директорията за временни файлове (C:\WINDOWS\Temp\)
Когато се изпълнява макрос, папката UNZIPPED FILES първо се изтрива и след това се създава отново. (По този начин файловете, които може да са били в папката по време на предишното изпълнение на макрос, се изтриват)
Функцията връща колекция, съдържаща пълните пътища до извлечените файлове.
Вижте също функцията UnZip_File, предназначена да разархивира файлове в определена папка, с възможност за изтриване на оригиналния архивен файл.
Пример за използване на функциятаFilesFromZip :
Извлечени файлове: 7 C:\WINDOWS\Temp\UNZIPPED FILES\Price List BMW.xls C:\WINDOWS\Temp\UNZIPPED FILES\Price List LAMBO.xls C:\WINDOWS\Temp\UNZIPPED FILES\Price List Porche.xls C:\WINDOWS\Temp\UNZIPP ED FILES\ROVER Price List.xls C:\WINDOWS\Temp\UNZIPPED FILES\VAG Price List.xls C:\WINDOWS\Temp\UNZIPPED FILES\Ford Price List.xls C:\WINDOWS\Temp\UNZIPPED FILES\Mercedes Price List.xls
Код на функциятаFilesFromZip :
За да работи функцията, трябва допълнително да копирате в стандартния модул кода на функцията FilenamesCollection
Друга версия на функцията, - работи по-стабилно, връща пътя до XLS файла от архива:
Коментари
Win8.1 - редът "oApp.Namespace(Folder).CopyHere oApp.Namespace(FileNameZip).Items" не работи по някаква причина, файловете не са разопаковани.
А за самата концепция на функцията - жалко е, че не можете да прочетете структурата на архива без глупаво разопаковане на всичко и всичко на диска
Здравей Сергей. Товамакросът използва вградените инструменти на Windows за извличане на файлове от архива, защото няма функции на WinRAR
Следователно е необходимо да се използва напълно различен макрос.
rar има опция за разопаковане само на файлове, които отговарят на определена маска, опитвам се да използвам тази опция. не работи.. моля за помощ
УРА. Много ви благодаря. Всичко работеше, наистина беше в кавички.
Можете да посочите всеки път
PS: Не съм тествал този код и може да работи само ако добавите кавички към пътя на приложението (защото съдържа интервал)
Точно така всичко ще работи правилно: (обърнете внимание на двойните и тройните кавички)
Добър ден! Благодаря за подробните обяснения, но самата програма работи при мен, но излиза съобщение: Архивите не са намерени! Може ли да се посочи произволен път за разархивиране или е задължително през "C:\Temp\"
Sub UnRar() WinRarApp$ = "C:\Program Files\WinRAR\WinRAR.exe e -o+" iPath = "C:\Temp\RAR ARCHIVE\" iArhivName$ = "C:\Documents and Settings\Desktop\Test\346.rar" adr$ = WinRarApp$ & """" & IPath & iArchiveName$ & """ """ & IPath & """ " RetVal = Shell(adr$, vbHide) 'vbNormalFocus) End Sub
Макросът е предназначен само за ZIP архиви (с които Windows може да работи сам, без да включва програми на трети страни) За съжаление, Windows не е запознат с архивния формат RAR, така че трябва да използвате софтуер на трети страни (например програмата WinRAR)
Това се прави нещо подобно: (и работи, между другото, по-бързо и по-стабилно от работата с ZIP папки с помощта на инструменти на Windows)
PS: Би било по-правилно да вземете пътя до програмата WinRAR от системния регистър (в края на краищата тя може да бъде инсталирана във всяка папка) Нов тази версия кодът работи.
PS: WinRAR има много ключове, с които можете да го стартирате (само 2 клавиша се използват в примера с макроса), така че можете да работите много гъвкаво с архиви от макроса на Excel И, разбира се, по този начин (чрез WinRAR) можете да работите с всякакъв тип архиви - не само RAR, но и ZIP и т.н. и така нататък.
Добър ден!
По някаква причина се създава временна папка за мен, но файлът Archive.rar не се разопакова във временната папка "\UNZIPPED FILES\"?