2014-04-18 104 views
0

我一直在試圖弄清楚如何壓縮一個Excel .Xlsm文件沒有運氣。以下代碼創建zip文件,但我無法弄清楚如何將.xlsm文件發送給它。任何幫助表示讚賞!如何壓縮Excel文件?

Dim zipPath As String = RegScoringWorkbookName.Replace(".xlsm", ".zip") 'create zip file from .xlsm file 
Try 
    If File.Exists(zipPath) Then 
    My.Computer.FileSystem.DeleteFile(zipPath, FileIO.UIOption.OnlyErrorDialogs, 
         FileIO.RecycleOption.DeletePermanently) 
    End If 
    Dim FilePath As String = RegScoringWorkbookName 'path of .xlsm file 
    Using FileStream = New FileStream(zipPath, FileMode.CreateNew) 
     Using archive = New ZipArchive(FileStream, ZipArchiveMode.Create, True) 
      Dim zipArchiveEntry = archive.CreateEntry(GetFileName(FilePath), CompressionLevel.Optimal) 
      Using zipStream = zipArchiveEntry.Open() 
       ' zipStream.WriteAsync() 
       zipStream.Close() 
      End Using 
     End Using 
    End Using 
Catch ex As Exception 

End Try 
+2

這是如何特定於Excel文件? –

回答

0

我只會在這裏引用MSDN代碼,因爲有這個確切的例子。 http://msdn.microsoft.com/de-de/library/vstudio/system.io.compression.ziparchive

Imports System.IO 
Imports System.IO.Compression 

Module Module1 

Sub Main() 
    Dim zipPath As String = "c:\users\exampleuser\end.zip" 
    Dim extractPath As String = "c:\users\exampleuser\extract" 
    Dim newFile As String = "c:\users\exampleuser\NewFile.txt" 

    Using archive As ZipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Create) 'Changed this to create from MSDN 
     archive.CreateEntryFromFile(newFile, "NewEntry.txt", CompressionLevel.Fastest) 
    End Using 
End Sub 

End Module 

它應該是自我解釋的。此時不需要使用文件流,因爲有一種預製方法來壓縮現有文件,即CreateEntryFromFile

+0

這就是Jens的絕招。我搜索過,從來沒有遇到過這個MSDN例子。 – JoeB