VBA导出为PDF会生成非常大的PDF文件

时间:2017-01-10 21:04:40

标签: c# excel vba excel-vba pdf

ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    FileName:="file_path", _
    Quality:=xlQualityMinimum, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False

我正在尝试使用VBA将Excel工作表导出为PDF。 excel表填充了时间序列图表。 VBA创建的PDF对于电子邮件来说太大了(90mb)。有没有办法导出到较小的文件大小?我尝试将质量更改为“xlQualityMinimum”,但文件大小没有变化。

或者,我可以在C#中压缩PDF。但我找不到一个免费的方法来做到这一点。如果无法在VBA中输出较小的文件,是否有人知道如何在C#中压缩?

1 个答案:

答案 0 :(得分:0)

考虑到您已经在使用VBA,您应该考虑使用7zip压缩PDF。它是免费的,可以从命令行启动。这是一个链接,您可以在其中找到来源; http://www.7-zip.org/

使用下面提供的宏,您可以导航和压缩单个文件。根据您的偏好,您需要对其进行调整以使其符合您的需求。

Sub ZipFiles()
   Dim src  As Variant
   Dim dst  As Variant
   Dim file As Variant

   Const PATH_TO_7Z = "C:\Program Files\7-Zip\7z.exe"

   Set src = CreateObject("Shell.Application").BrowseForFolder(0, "Source folder", &H245)
   If Not src Is Nothing Then
      src = src.Self.Path & "\"

      Set dst = CreateObject("Shell.Application").BrowseForFolder(0, "Destination folder", &H245)
      If Not dst Is Nothing Then
         dst = dst.Self.Path & "\"

         For Each file In CreateObject("Scripting.FileSystemObject").GetFolder(src).Files
            Shell PATH_TO_7Z & " a -tzip """ & dst & file.Name & ".zip"" """ & file.Path & """"
         Next
      End If
   End If
End Sub

否则,如果您的源文件夹和目标文件夹是不变的,您可以执行以下操作。

Sub ZipFiles()
   Dim file As Variant

   Const SOURCE     = "C:\test\source"
   Const DEST       = "C:\test\destination"
   Const PATH_TO_7Z = "C:\Program Files\7-Zip\7z.exe"

   For Each file In CreateObject("Scripting.FileSystemObject").GetFolder(SOURCE).Files
      Shell PATH_TO_7Z & " a -tzip """ & DEST & "\" & file.Name & ".zip"" """ & file.Path & """"
   Next
End Sub