【发布时间】:2021-01-29 06:57:55
【问题描述】:
我使用以下例程将图表导出(保存)为 pdf。该函数获取集合中用户选择的图表的名称。然后将其一一导出为pdf,用户可以在其中选择导出的pdf的保存文件夹。这是我的代码。
Private Function ExportCurvesPDF(Curves As Collection)
Dim source As Workbook
Dim i As Integer
Dim FileName As String
Dim ExportPath As String
Set source = Thisworkbook
ExportPath = "V:\"
For i = 1 To Curves.count
FileName = Application.GetSaveAsFilename(ExportPath & Curves(i) & ".pdf")
If FileName <> "False" Then
source.Sheets(Curves(i)).ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End If
ExportPath = common_DB.FolderFromPath(FileName)
Next i
End Function
代码按预期工作,并打印出 pdf,如下面的示例:
虽然 pdf 有相当大的余量,但我想减少或删除它。我曾尝试更改 IgnorePrintArea 属性和 IncludeDocProperties 属性,但似乎对边距没有任何影响。
有没有办法用.ExportAsFixedFileFormat 减少边距?
编辑:我被要求提供图表在 excel 中的屏幕截图:
【问题讨论】:
-
您是否主要只是想删除右侧的空白? Excel 中实际的“ChartSheet”中是否存在右边距上的空白?如果是这样,是否可以手动拉伸图表?该空间中是否可能存在一些隐藏的图表元素(图例、标签等)?
-
在 excel 中正确设置页面实际上非常棘手。对于分页符,最安全的方法是在它们自动出现后将其恢复。对于边距,必须使用
.pagesetup对象。但也有影响的一件事是实际使用的打印机。在设置工作表后更改打印机可以(并且通常会)更改分页符、页边距等。因此,您应该始终使用您最终将使用的任何 pdf 打印机来设置页面。此外,如果打印机有一些“默认”边距,则无法通过 VBA 设置,除非打印机具有 VBA API -
以下所有答案都忽略了打印机默认设置。如果您要删除任何 PDF 中的整个页边距,则必须查看特定打印机的可能设置(文件 -> 打印)。有时可在打印机软件网站上找到有关打印机特定设置的信息。例如
PDFCreator有一个COM接口,一个人可以更改很多设置,而其他一些设置可以手动更改,并且会产生全局效果。CutePDF没有。Microsoft print to PDF也是如此。 -
@LucasRaphaelPianegonda,我会为你解答。实际上,当 excel 决定崩溃并删除 2 小时的工作时,我有过。答案基本上是:由于 excel 和打印机中的标准边距(无法覆盖),您将无法直接在 Excel 中执行此操作。然而,它可以通过其他方式实现。明天我可能有时间补上丢失的作品,但今晚不会重拍。
-
我真的不记得@GWD了。大约在我忙于论文项目的时候,这可能就是为什么答案从未发布的原因。使用单词可能也是我选择的方式。处理在 Excel 中创建的打印(甚至是 pdf)文档是一场噩梦,其 API 不直观且受限制。
标签: excel vba export-to-pdf