将 Excel-worksheet 导出到 PDF 文件时出现奇怪的 Powershell 行为

Odd Powershell behaviour when exporting an Excel-worksheet to a PDF file

我编写了一个 Powershell 脚本,可以将 Excel 工作簿中的每个工作表转换为单独的 PDF 文件。当输出 PDF 文件适合一页时,下面的代码可以正常工作。

当工作表的内容很大并且通常应该保存为两页时,它会尝试将其放在一页上。这会导致单元格与页脚重叠。它应该在下一页。

错误消息显示 ExportAsFixedFormat 方法出错。此异常仅在输出 PDF 应跨两页或多页导出时显示。

Value does not fall within the expected range. (System.ArgumentException)

在尝试对此进行调试时,我遇到了 PageSetup 属性。我想查看它包含的页面数量,所以我将 Write-Host $Worksheet.PageSetup.Pages 添加到内部循环。

奇怪的是,添加这个 Write-Host 解决了这个问题。内容现在分布在多个页面上。更奇怪的是,虽然正确创建了 PDF 文件,但错误消息仍然存在。我有两个问题:

我也尝试过 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()

因此,出现五次错误消息和导出时必须在五个点处分割 PDF 是没有关系的。 Excel 文件是通过许多模板创建的,这些模板作为不可见的工作表驻留在工作簿中。巧合的是,有五个隐藏的工作表。

程序试图导出并保存这些工作表。但按理说,没能做到。

我在我的循环中添加了一个检查,用于检查工作表是否为 hidden or very hidden。这些可见性选项分别由 1 或 2 表示(-1 表示可见)。

if(($Worksheet.Name -eq "Voorblad") -or ($Worksheet.Visible -ne -1))
{
    continue
}

我还能够删除我之前添加的 Write-Host,脚本仍然有效。