【问题标题】:Read word document (*.doc) content with tables etc使用表格等阅读 word 文档 (*.doc) 内容
【发布时间】:2012-10-27 23:36:19
【问题描述】:

我有一个 Word 文档(2003 年)。我正在使用 Powershell 来解析文档的内容。 该文档在顶部包含几行文本、十几个列数不同的表格,然后是更多文本。

我希望能够像下面这样阅读文档:

  1. 阅读文档(制作必要的对象等)
  2. 获取每一行文本
  3. 如果不是表格的一部分,则作为文本处理并写入输出
  4. 其他
  5. 如果是表格的一部分
  6. 获取表号(按顺序)并根据列解析输出
  7. 结束如果

下面是我已经开始写的powershell脚本:

$objWord = New-Object -Com Word.Application
$objWord.Visible = $false
$objDocument = $objWord.Documents.Open($filename)
$paras = $objDocument.Paragraphs
foreach ($para in $paras) 
{ 
    Write-Output $para.Range.Text
}

我不确定 Paragraphs 是否是我想要的。有什么更适合我的目的吗? 我现在得到的只是文档的全部内容。我如何控制我得到的东西。就像我想得到一条线一样,能够确定它是否是表格的一部分,并根据它是什么数字表格采取行动。

【问题讨论】:

  • Word 文档没有按行组织。请退后一步,描述您要解决的问题,而不是您认为的解决方案。
  • 当然 - 感谢您的回复...所以我有这个包含一些文本和大约 5 或 6 个表格的 word 文档。每个表的列数从 2 到 6 不等。每个表的第一行描述标题。我想要完成的是(使用 Powershell)读取文档、解析表的内容并输出可以针对 Oracle 数据库单独运行的 sql 语句。现在我有很多这样的文件,每个文件的结构都相似。但每个表中的行可能或多或少。

标签: powershell ms-word


【解决方案1】:

您可以通过Tables 集合枚举 Word 文档中的表格。 RowsColumns 属性将允许您确定给定表中的行数/列数。可以通过Cell 对象访问各个单元格。

将打印文档中每个表格的最后一行和最后一列的单元格值的示例:

$wd = New-Object -ComObject Word.Application
$wd.Visible = $true
$doc = $wd.Documents.Open($filename)
$doc.Tables | ForEach-Object {
  $_.Cell($_.Rows.Count, $_.Columns.Count).Range.Text
}

【讨论】:

  • 非常感谢。但是我有一个问题——我怎么知道我在一个表中以便调用与表相关的逻辑?有没有类似 isTable() 的构造?
  • 不确定我是否理解这个问题。 Tables 集合包含文档中的所有表格,仅此而已。当您从该集合中访问一个对象时,该对象就是一个表。
  • 嗯 - 我想我现在明白你说的话了。我试图以顺序方式读取所有文本,无论它是否是表格 - 如果它是表格,那么我想调用表格逻辑。但我不需要那样做。使用表集合似乎更干净。非常感谢。
  • 作为记录,要确定您是否在表中,请使用布尔值“Selection.Information(wdWithInTable)”。 (晚了 6 年)
猜你喜欢
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多