2014-04-18 102 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