我编写了一个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()
发布于 2021-06-15 11:06:41
因此,获得错误消息五次和导出必须在五个点拆分PDF是没有关系的。Excel文件是通过许多模板创建的,这些模板作为不可见工作表驻留在工作簿中。巧合的是,有五个隐藏的工作表。
该程序试图导出和保存这些工作表。但从逻辑上讲,没有做到这一点。
我在循环中添加了一个检查,检查工作表是否为隐藏的或非常隐藏的。这些可见性选项分别由1或2表示(-1表示可见)。
if(($Worksheet.Name -eq "Voorblad") -or ($Worksheet.Visible -ne -1))
{
continue
}
我还能够删除我之前添加的Write-Host
,脚本保持了功能。
https://stackoverflow.com/questions/67982184
复制相似问题