Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как создать ZIP архив? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как создать ZIP архив? (Существует ли другой вариант кроме .Namespace?)
Как создать ZIP архив?
Bagir Дата: Пятница, 18.01.2013, 18:09 | Сообщение № 1
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Задача простая. Добавить файлик в существующий zip архив или создать новый. Есть известный способ это сделать:
[vba]
Код
Sub CreateZip()
   
  Dim iTmp As Integer, sTmp As String
  Dim oApp As Object
  Set oApp = CreateObject("Shell.Application")
     
  'Путь к зипу
   sTmp = "D:\MyArch.zip"
           
  'Получение числа файлов в архиве.
  'При ошибке будет создан пустой архив
  On Error GoTo ErrorLable
  iTmp = oApp.Namespace(sTmp & "").Items.Count
  On Error GoTo 0

  'Копируем файл в архив
  oApp.Namespace(sTmp & "").CopyHere "D:\MyFile.txt"
   
  'ждём завершения упаковки файла
  Do
    DoEvents: DoEvents
    Application.Wait (Now + TimeValue("0:00:01"))
  Loop Until oApp.Namespace(sTmp & "").Items.Count = iTmp + 1

  MsgBox "ОК"

Exit Sub

ErrorLable:
  If Err = 91 Then
    'При ошибке будет создан пустой архив
    Open sTmp For Binary Access Write As #1
    Put #1, 1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String$(18, 0)
    Close #1
    Resume
  End If

End Sub
[/vba]

Вопрос: А можно ли обойтись без .Namespace? В идеале вообще хотелось бы не использовать файловую систему. Создать зип как объект, нааддить туда своих файлов, а затем сохранить его. Может кто нибудь нашел способ? Например какую-нибудь dll'ку. Поделитесь пожалуйста.
 
Ответить
СообщениеЗадача простая. Добавить файлик в существующий zip архив или создать новый. Есть известный способ это сделать:
[vba]
Код
Sub CreateZip()
   
  Dim iTmp As Integer, sTmp As String
  Dim oApp As Object
  Set oApp = CreateObject("Shell.Application")
     
  'Путь к зипу
   sTmp = "D:\MyArch.zip"
           
  'Получение числа файлов в архиве.
  'При ошибке будет создан пустой архив
  On Error GoTo ErrorLable
  iTmp = oApp.Namespace(sTmp & "").Items.Count
  On Error GoTo 0

  'Копируем файл в архив
  oApp.Namespace(sTmp & "").CopyHere "D:\MyFile.txt"
   
  'ждём завершения упаковки файла
  Do
    DoEvents: DoEvents
    Application.Wait (Now + TimeValue("0:00:01"))
  Loop Until oApp.Namespace(sTmp & "").Items.Count = iTmp + 1

  MsgBox "ОК"

Exit Sub

ErrorLable:
  If Err = 91 Then
    'При ошибке будет создан пустой архив
    Open sTmp For Binary Access Write As #1
    Put #1, 1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String$(18, 0)
    Close #1
    Resume
  End If

End Sub
[/vba]

Вопрос: А можно ли обойтись без .Namespace? В идеале вообще хотелось бы не использовать файловую систему. Создать зип как объект, нааддить туда своих файлов, а затем сохранить его. Может кто нибудь нашел способ? Например какую-нибудь dll'ку. Поделитесь пожалуйста.

Автор - Bagir
Дата добавления - 18.01.2013 в 18:09
Bagir Дата: Среда, 23.01.2013, 14:28 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Может хоть идейку какую подкинете?
 
Ответить
СообщениеМожет хоть идейку какую подкинете?

Автор - Bagir
Дата добавления - 23.01.2013 в 14:28
ratboy Дата: Среда, 23.01.2013, 23:17 | Сообщение № 3
Группа: Авторы
Ранг: Прохожий
Сообщений: 2
Репутация: 12 ±
Замечаний: 0% ±

Bagir, по моему скромному мнению, а что мешает работать с любой dll архиваторской библиотекой через shell? Например с 7z...
 
Ответить
СообщениеBagir, по моему скромному мнению, а что мешает работать с любой dll архиваторской библиотекой через shell? Например с 7z...

Автор - ratboy
Дата добавления - 23.01.2013 в 23:17
Bagir Дата: Среда, 30.01.2013, 13:57 | Сообщение № 4
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

А можно простенький примерчик?
 
Ответить
СообщениеА можно простенький примерчик?

Автор - Bagir
Дата добавления - 30.01.2013 в 13:57
Bagir Дата: Вторник, 26.03.2013, 18:38 | Сообщение № 5
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

со времени создания темы, открыл для себя DotNetZip и использовал для создания zip архивов, передавая туда как файлы на диске, так и значения строковых переменных. http://dotnetzip.codeplex.com/downloads/get/258015
Вот примерчик создания файла:
[vba]
Код
Public Sub ZIPArchiv()

   Dim ZipApp As Object
   Set ZipApp = CreateObject("Ionic.Zip.ZipFile")

   With ZipApp
     '.Encryption = 3
     '.Password = "123"
        
     .AddEntry "Readme.txt", "Содержание файла Readme.txt передано строкой"
       
     .AddFile "D:\MyFile1.txt"
     .AddFile "D:\MyFile2.txt"
        
      .Name = "D:\MyArch.zip"
      .Comment = "Archive comment. Only English letters."
      .Save
      .Dispose
   End With

End Sub
[/vba]

А вот сейчас понадобилось открыть уже созданный архив для внесения изменений. Кто дружит с DotNetZip подскажите плиз, чтобы кучу инфы не перебирать, или ссыль путевую по этой теме.

Нашел тут кое что:
.Initialize
Работает, но хотелось бы узнать все возможности. Подкиньте ссыль почитать


Сообщение отредактировал Bagir - Вторник, 26.03.2013, 18:47
 
Ответить
Сообщениесо времени создания темы, открыл для себя DotNetZip и использовал для создания zip архивов, передавая туда как файлы на диске, так и значения строковых переменных. http://dotnetzip.codeplex.com/downloads/get/258015
Вот примерчик создания файла:
[vba]
Код
Public Sub ZIPArchiv()

   Dim ZipApp As Object
   Set ZipApp = CreateObject("Ionic.Zip.ZipFile")

   With ZipApp
     '.Encryption = 3
     '.Password = "123"
        
     .AddEntry "Readme.txt", "Содержание файла Readme.txt передано строкой"
       
     .AddFile "D:\MyFile1.txt"
     .AddFile "D:\MyFile2.txt"
        
      .Name = "D:\MyArch.zip"
      .Comment = "Archive comment. Only English letters."
      .Save
      .Dispose
   End With

End Sub
[/vba]

А вот сейчас понадобилось открыть уже созданный архив для внесения изменений. Кто дружит с DotNetZip подскажите плиз, чтобы кучу инфы не перебирать, или ссыль путевую по этой теме.

Нашел тут кое что:
.Initialize
Работает, но хотелось бы узнать все возможности. Подкиньте ссыль почитать

Автор - Bagir
Дата добавления - 26.03.2013 в 18:38
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как создать ZIP архив? (Существует ли другой вариант кроме .Namespace?)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!