代码之家  ›  专栏  ›  技术社区  ›  not2qubit

如何使用PowerShell禁用在所有Excel页面上显示分页符?

  •  0
  • not2qubit  · 技术社区  · 1 年前

    我使用许多带有许多选项卡的Excel工作表,无法永久禁用分页符视图,我必须选择每个选项卡,然后进入 Settings > Advanced 并禁用 View page breaks 复选框。无论此设置如何,在工作表中添加新选项卡都会使分页符返回。

    我知道有些VBA脚本会在多个页面上禁用,但您需要将VBA添加到每张图纸中,这也很耗时。我正在寻找一种方法来禁用 view page break 复选框,从所有选项卡上的任何Excel工作表中永久删除。或者,可能有一些注册表设置默认禁用此复选框?

    最好是通过PowerShell,所以我可以在任何工作表上从PowerShell CLI运行它,并让它禁用它。也许是这样的:

    ./disablePageBreakView.ps1 SomeExcelFile.xlsx
    

    更新: 2023-12-25

    如果可以将VBS脚本转换为powershell,我们可以使用 this answer :

    Option Explicit
    Public Sub disableAllPageBreaks()
      Dim ws as Worksheet
      For Each ws In ActiveWorkbook.Worksheets
        ws.DisplayPageBreaks = False
      Next ws
    End Sub
    

    工具书类 :

    0 回复  |  直到 1 年前
        1
  •  2
  •   mklement0    1 年前

    笔记

    • 下面的代码是 PowerShell惯用等效于您问题中的VBA代码 ; 它接受一个或多个工作簿的文本文件路径,可以作为直接参数,也可以通过 Get-ChildItem 管道输入。

    • 这个这个 可以也可以不 坚持不懈 更改设置 为你。

      • 在我基于Office 2019的测试中 默认情况下,但正在更改 坚持不懈 失败-无论是通过Excel GUI本身还是通过下面的函数。通过Excel GUI切换设置时,确实注册为“弄脏”工作簿,即需要 节省物 它在重新开放时又恢复到关闭状态。
    function Disable-PageBreaks {
      param(
        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [Alias('PSPath')]
        [string[]] $LiteralPath
      )
      begin {
        $xl = New-Object -ComObject Excel.Application
      }
      process {
        & { # Run in a child scope, to auto-release the COM references.
          foreach ($p in Convert-Path -LiteralPath $LiteralPath) {
            if (-not $?) { return } # skip nonexistent files.
            $wb = $xl.Workbooks.Open($LiteralPath)
            foreach ($ws in $wb.Worksheets) {
              $ws.DisplayPageBreaks = $false
            }
            $wb.Save()
            $wb.Close()
          }
        }
      }
      end {
        $xl.Quit()
        $xl = $null
        # Note: The excel.exe process should disappear after a few seconds.
      }
    }