我正在尝试编写一个 PowerShell 脚本来计算 Word 文档中的页数,该脚本最终将存储在数据库中,用于评估文档中的平均页数。我们有数千个从提供商处获得的 Word 文档,而我面临的挑战是,我已经在没有 Office 应用程序的系统中拥有自动化解决方案,这意味着无法实现 COM 对象。 我一直在将 PSWriteWord 作为一个选项,但用于获取页面设置的命令似乎只适用于边距、大小和方向,并且不输出页数。有人对如何解决这个问题有建议吗? 我添加了我用 PSWriteWord 尝试过的代码和结果,以防有人发现我的方法存在侥幸。
Import-Module PSWriteWord
$WordDocument = Get-WordDocument -FilePath 'C:\Users\user\Desktop\testdocument.docx'
Get-WordPageSettings -WordDocument $WordDocument
最佳答案
您可以使用 Shell.Application object和 System.Document.PageCount标准 Windows 属性,如下所示:
$application = New-Object -com "Shell.Application"
$folder = $application.Namespace("c:\myFolder1\myFolder2")
$docfile = $folder.ParseName("myDoc.docx");
Write-Host $docfile.ExtendedProperty("System.Document.PageCount")
这相当于您在 Shell 的“属性”对话框的“详细信息”选项卡中看到的内容。
如果根本没有安装Word,此方法将只能读取旧的Word 文件(.doc 格式)。
对于.docx文件(Open Xml格式),如果没有安装Word,可以使用微软的Open Xml SDK 。只需从Nuget下载软件包即可,解压它,然后将 DocumentFormat.OpenXml.dll
复制到磁盘上的某个位置(例如,从 net46 文件夹中)。这是您唯一需要的额外文件。
完成此操作后,另一个脚本将转储页数:
[System.Reflection.Assembly]::LoadFrom("DocumentFormat.OpenXml.dll") | out-null
$doc = [DocumentFormat.OpenXml.Packaging.WordprocessingDocument]::Open("c:\myFolder1\myFolder2\myDoc.docx", $false)
Write-Host $doc.ExtendedFilePropertiesPart.Properties.Pages.Text
$doc.Dispose()
关于powershell - 通过Powershell计算Word文档中的页数,无需com对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71738886/