C# VBA导出为PDF生成一个非常大的PDF文件

C# VBA导出为PDF生成一个非常大的PDF文件,c#,vba,excel,pdf,C#,Vba,Excel,Pdf,我正在尝试使用VBA将excel工作表导出为PDF。excel表格中充满了时间序列图。VBA创建的PDF太大,无法发送电子邮件(90mb)。有没有办法导出到较小的文件大小?我曾尝试将质量更改为“xlQualityMinimum”,但文件大小没有改变 或者,我可以用C#压缩PDF。但我找不到一个自由的方法来做这件事。如果无法用VBA输出较小的文件,是否有人知道如何用C#压缩?考虑到您已经在使用VBA,您应该考虑使用7zip压缩PDF。它是免费的,可以从命令行启动。这里有一个链接,你可以在这里找到来

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


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

考虑到您已经在使用VBA,您应该考虑使用7zip压缩PDF。它是免费的,可以从命令行启动。这里有一个链接,你可以在这里找到来源

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

ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    FileName:="file_path", _
    Quality:=xlQualityMinimum, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False
否则,如果源文件夹和目标文件夹是常量,则可以执行以下操作

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

这可以用VBA压缩,还是C#需要发挥作用?@Brandon:C#不需要发挥作用,它可以用任何一种语言压缩。PDF中有多少页?@TimWilliams:PDF总共有117页,但因为将excel表导出为PDF占用了太多内存,我将117页分成了6个PDF文件,每个大约20页。如果我关闭该选项,是否选中了“ISO19005-1兼容”选项(导出时在“选项”对话框中),文件会变小。见:谢谢。我的单词选择(压缩)很差。不幸的是,最终产品需要是PDF文件而不是zip文件,这样才能在移动设备上打开和查看电子邮件附件。我需要一种降低PDF质量的方法。
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