将 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 行为的主要内容,如果未能解决你的问题,请参考以下文章

保存 Excel 文件并使用不同的工作表将其导出为 pdf

将对象粘贴到空单元格/工作表时出现错误 424 未被识别为对象

数据表删除导出到 pdf 和 excel 的列

如何将EXCEl中多张Sheet工作表转换成一个PDF

如何把SQLServer表数据导出为Excel文件

有没有办法将 excel 工作簿中的单个工作表导出到使用 pandas 分隔 csv 文件?