将 Excel 工作表导出到 PDF 文件时出现奇怪的 Powershell 行为
Posted
技术标签:
【中文标题】将 Excel 工作表导出到 PDF 文件时出现奇怪的 Powershell 行为【英文标题】:Odd Powershell behaviour when exporting an Excel-worksheet to a PDF file 【发布时间】:2021-08-31 01:32:26 【问题描述】:我编写了一个 Powershell 脚本,可将 Excel 工作簿中的每个工作表转换为单独的 PDF 文件。当输出的 PDF 文件适合一页时,下面的代码可以正常工作。
当工作表的内容很大并且通常应该保存到两页时,它会尝试将其放在一页上。这会导致单元格与页脚重叠。它应该在下一页。
错误消息显示ExportAsFixedFormat
方法中的错误。此异常仅显示输出 PDF 何时应跨两页或多页导出。
值不在预期范围内。 (System.ArgumentException)
在尝试调试时,我遇到了PageSetup
属性。我想看看它包含的页面数量,所以我在内部循环中添加了Write-Host $Worksheet.PageSetup.Pages
。
奇怪的是,添加这个Write-Host
解决了这个问题。内容现在分散在多个页面上。更奇怪的是,虽然 PDF 文件被正确创建,但错误消息仍然存在。我有两个问题:
Write-Host
语句如何修复导出?
如何消除错误消息(不只是抑制它)?
我也玩过PageSetup.FitToPagesTall
(设置为2)和PageSetup.FitToPagesWide
(设置为1)之类的属性,但这弄乱了PDF文件的布局。
$Formats = "Microsoft.Office.Interop.Excel.xlFixedFormatType" -as [type]
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $false
$ExcelFiles = Get-ChildItem $ExcelDirectory -Filter "*.xlsx" -Recurse
foreach($ExcelFile in $ExcelFiles)
$Workbook = $Excel.Workbooks.Open($ExcelFile.FullName)
$Workbook.Saved = $true
foreach($Worksheet in $Workbook.Worksheets)
if($Worksheet.Name -eq "Voorblad")
continue
# Some algorithm to calculate the output file name.
# Not relevant for this question. Results in the variable $SheetPrettyName
$OutputPath = "$ExcelDirectory\" + $SheetPrettyName + ".pdf"
$Worksheet.ExportAsFixedFormat($Formats::xlTypePDF, $OutputPath)
$Excel.Workbooks.Close()
$Excel.Quit()
【问题讨论】:
【参考方案1】:因此,收到五次错误消息和导出必须在五个点拆分 PDF 是不相关的。 Excel 文件是通过许多模板创建的,这些模板作为不可见的工作表驻留在工作簿中。巧合的是,有五个隐藏的工作表。
程序试图导出并保存这些工作表。但从逻辑上讲,没能做到。
我在循环中添加了一个检查,检查工作表是否为hidden or very hidden。这些可见性选项分别由 1 或 2 表示(-1 表示可见)。
if(($Worksheet.Name -eq "Voorblad") -or ($Worksheet.Visible -ne -1))
continue
我还能够删除我之前添加的Write-Host
,该脚本仍然有效。
【讨论】:
以上是关于将 Excel 工作表导出到 PDF 文件时出现奇怪的 Powershell 行为的主要内容,如果未能解决你的问题,请参考以下文章