【问题标题】:Odd Powershell behaviour when exporting an Excel-worksheet to a PDF file将 Excel 工作表导出到 PDF 文件时出现奇怪的 Powershell 行为
【发布时间】: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()

【问题讨论】:

    标签: excel powershell com powershell-5.0


    【解决方案1】:

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

    程序试图导出并保存这些工作表。但从逻辑上讲,没能做到。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2023-03-03
      • 2020-01-19
      • 2016-08-04
      • 2021-04-22
      • 2014-01-12
      • 1970-01-01
      相关资源
      最近更新 更多