读取带有表格等内容的Word文档(*.doc)的内容

6
我有一个2003版的Word文档。我正在使用Powershell来解析文档内容。该文档包含几行文本,十几个列数不同的表格,然后再加一些文本。
我希望能够读取文档,并按以下步骤处理:
1. 读取文档(创建必要的对象等); 2. 获取每行文本; 3. 如果不属于表格,则按文本处理并输出; 4. 否则, 5. 如果属于表格, 6. 获取表格编号(按顺序),并根据列数解析输出; 7. 结束If语句。
下面是我已经开始编写的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
}

我不确定段落是否符合我的需求。有没有更适合我目的的东西? 现在我所得到的只是整个文档的内容。我应该如何控制我所获得的内容?比如,我想要获取一行,能够确定它是否属于表格,并根据它所在的表格编号采取相应的行动。


1
Word文档并不是按行组织的。请退一步,描述您要解决的问题,而不是您认为的解决方案。 - Ansgar Wiechers
好的 - 谢谢回复...我有一个包含文本和5到6个表格的Word文档。每个表格的列数不同,从2到6不等。每个表格的第一行描述了表头。我的目标是(使用Powershell)读取文档,解析表格内容并输出可以单独运行于Oracle数据库的SQL语句。现在我有很多这样的文档,它们的结构相似。但每个表格中的行数可能会多也可能会少。 - Anoop
1个回答

8
你可以通过 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() 这样的结构? - Anoop
不确定我是否理解了这个问题。Tables集合包含文档中的所有表格,而且没有其他内容。当您从该集合中访问对象时,该对象即为表格。 - Ansgar Wiechers
嗯 - 我现在明白你说的了。我一直试图按顺序阅读所有文本,无论它是否是表格 - 如果是表格,我想调用表格逻辑。但我不需要那样做。使用表格集合似乎更清晰。非常感谢。 - Anoop
记录一下,要确定你是否在表格中,请使用布尔值“Selection.Information(wdWithInTable)”。(晚了6年) - dcromley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接