powershell - 通过Powershell计算Word文档中的页数,无需com对象

标签 powershell ms-word com

我正在尝试编写一个 PowerShell 脚本来计算 Word 文档中的页数,该脚本最终将存储在数据库中,用于评估文档中的平均页数。我们有数千个从提供商处获得的 Word 文档,而我面临的挑战是,我已经在没有 Office 应用程序的系统中拥有自动化解决方案,这意味着无法实现 COM 对象。 我一直在将 PSWriteWord 作为一个选项,但用于获取页面设置的命令似乎只适用于边距、大小和方向,并且不输出页数。有人对如何解决这个问题有建议吗? 我添加了我用 PSWriteWord 尝试过的代码和结果,以防有人发现我的方法存在侥幸。

Import-Module PSWriteWord
$WordDocument = Get-WordDocument -FilePath 'C:\Users\user\Desktop\testdocument.docx'
Get-WordPageSettings -WordDocument $WordDocument  

enter image description here

最佳答案

您可以使用 Shell.Application objectSystem.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/

相关文章:

powershell - 如何为VIM安装插件?

PowerShell:使用 Invoke-Expression 管理错误

c# - 从 VBA 或 C# Interop 获取 Microsoft Word 中的文本位置

c++ - 如何获取 IShellFolder 的 PIDL

c++ - 您可以将 LPTSTR 转换为 BSTR 吗?

c++ - CComPtr 的 ".Release()"和 "->Release()"之间的区别?

powershell - 在 VSCode 集成终端内运行时如何自定义 powershell?

powershell - 在 PowerShell 中使用全局目录

python - 如何使用python docx获取word文档中文本的实际样式

javascript - 使用 ASP.NET Web api 为 Office 加载项添加 Web 服务