【问题标题】:Parsing Word Document using Powershell使用 Powershell 解析 Word 文档
【发布时间】:2020-08-17 23:28:32
【问题描述】:

我必须编写一个可以解析word文档的powershell脚本。具体来说,它必须从文本框中读取文本并将其存储在变量中。我知道如何阅读文本,例如从一个段落,但我不知道如何处理文本框。我将不胜感激。

这是我的代码的一部分:

    $Word = New-Object -comobject Word.Application
    $Word.Visible = $False
    $datasheet = $word.Documents.Open($files[$i].FullName)
    $value = ....?

这是我需要阅读的框的屏幕截图:

【问题讨论】:

  • TextBoxes 应该可以通过$datasheet.Shapes 集合访问
  • @MathiasR.Jessen 非常感谢。我试过 $text = $datasheet.Shapes[1].range.Text,但变量为空。我错过了什么?

标签: powershell ms-word


【解决方案1】:

枚举Shapes 集合的内容并过滤msoTextBox type (17) 的形状:

$datasheet.Shapes |Where-Object {$_.Type -eq 17} |ForEach-Object {
    # copy $_.TextFrame.TextRange.Text to wherever you need it in here 
    # $_.TextFrame.TextRange is a range object like any other (useful if you need formatting details or raw XML for example)
}

【讨论】:

  • 再次感谢您。我仍然做错了什么。执行永远不会进入循环内部。此外,当我删除条件 Where-Object {$_.Type -eq 17} 时,它仍然没有进入循环。由于某种原因,该集合是空的。我在我的问题中添加了盒子的图片。也许它不是一个形状??
  • @DavidShochet $datasheet.Shapes.Count0?你确定你已经以$datasheet 加载/打开了文档?如果是这样,恐怕我不知道:)
  • 通过让 MSWord 告诉您交易内容,仔细检查您自己和您的电话。在打开的文档中,启动宏记录器,使用用户界面单击文档,导出 VBA 并比较你在做什么。
  • @DavidShochet Ahh,所以这是一种不同的形状。尝试$datasheet.Shapes |% Type 枚举文档中存在的所有形状类型
  • @DavidShochet 看看MsoShapeType documentation,看起来 6 是一个组 - 可能它会包含实际的文本框
猜你喜欢
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 2013-07-06
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
相关资源
最近更新 更多