【问题标题】:Word.Application Freezing/Hanging on certain filesWord.Application 冻结/挂在某些文件上
【发布时间】:2017-11-03 03:35:17
【问题描述】:

我正在尝试从 .docx 文档批量创建 PDF 文档。无缘无故(文件权限相同,文件没有宏等)文件将挂起。我必须终止 Word 进程并强制关闭 PowerShell。

脚本在这里:

[CmdletBinding()]

Param(
    [Parameter(Mandatory=$true)]
    [string]$FilePath
)

$Files = Get-ChildItem -Recurse "$FilePath\*.docx"

$Word = New-Object -ComObject Word.Application

foreach ($File in $Files) {
    # open a Word document, filename from the directory
    $Doc = $Word.Documents.Open($File.FullName)
    Write-Verbose "Test $($File.FullName)"
    # Swap out DOCX with PDF in the Filename
    $Name = ($Doc.FullName).Replace("docx","pdf")

    # Save this File as a PDF in Word 2010/2013
    $Doc.SaveAs([ref] [string]$Name, [ref] 17)
    $Doc.Close()
}

这是 PowerShell 输出。你可以看到它挂在的文件:

它对大约 2-3% 的文件执行此操作。这看起来与here 发布的这个问题非常相似。但是,他们的解决方案并不能解决我的问题。

有人有什么建议吗?我也想知道是否有一种直观的方式来调试它。我看不到程序抛出任何错误。

【问题讨论】:

  • 由于经常出现通用异常消息,从 PowerShell 中对 com 对象进行故障排除通常非常困难。
  • 它是否每次都在同一个文件上崩溃,即表明文件存在一些内部差异/损坏?
  • 是的,每次都是相同的文件。从根本上说,文件没有什么不同。它们是用相同版本的 word 创建的,它们都是相似的文件大小,没有宏等。

标签: powershell ms-word


【解决方案1】:

如何关闭整个应用程序(是的,它更慢),而不是每个文档?像这样的:

Foreach ($File in $Files) {

    $Word = New-Object -ComObject Word.Application 

    $Name = $File.FullName -replace ‘docx’,’pdf’

    ($Word.Documents.Open($File.FullName)).SaveAs([ref]$Name,[ref]17)

    $Word.Application.ActiveDocument.Close()

    $Word.Quit()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2016-01-23
    相关资源
    最近更新 更多