使用PowerShell+PSWriteWord提取Word表格内容的技术求助
提取DOCX表格内容并迁移到新表格的PowerShell方案
你遇到的问题是因为Get-WordTable返回的是表格对象的元数据和底层XML结构,而非直接可读的文本内容。要提取实际单元格文本,需要遍历表格的Rows和Cells集合,读取每个单元格的段落文本。
步骤1:提取源表格的文本内容
以下脚本会读取目标DOCX中的表格,将每个单元格的文本提取到二维数组中:
Import-Module PSWriteWord # 加载源文档并获取指定表格 $sourceDoc = Get-WordDocument "C:\Users\Administrator\Desktop\Journal_VU6-FIAE_KW11_14032022-20032022.docx" $sourceTable = Get-WordTable -WordDocument $sourceDoc -TableID 0 # 初始化存储表格内容的二维数组 $tableData = @() # 遍历每一行 foreach ($row in $sourceTable.Rows) { $rowData = @() # 遍历当前行的每个单元格 foreach ($cell in $row.Cells) { # 将单元格内的所有段落文本合并(用换行符分隔多段落) $cellText = $cell.Paragraphs.Text -join "`n" $rowData += $cellText } # 将当前行数据加入二维数组(逗号避免数组扁平化) $tableData += ,$rowData } # 可选:打印提取的内容验证 $tableData | ForEach-Object { $_ -join "`t" }
步骤2:将内容填充到目标表格
拿到提取的$tableData后,即可创建新文档或打开已有文档,将数据写入新表格:
# 创建新的目标文档(或用Get-WordDocument打开已有文档) $targetDoc = New-WordDocument # 添加与源表格行列数一致的新表格 $targetTable = Add-WordTable -WordDocument $targetDoc -Rows $sourceTable.RowCount -Columns $sourceTable.ColumnCount # 遍历数据并填充到新表格 for ($rowIndex = 0; $rowIndex -lt $tableData.Count; $rowIndex++) { for ($colIndex = 0; $colIndex -lt $tableData[$rowIndex].Count; $colIndex++) { Set-WordTableCellValue -WordDocument $targetDoc -Table $targetTable -RowIndex $rowIndex -ColumnIndex $colIndex -Value $tableData[$rowIndex][$colIndex] } } # 保存并关闭目标文档 Save-WordDocument -WordDocument $targetDoc -Path "C:\Your\Path\To\New_Journal.docx" -Close
注意事项
Paragraphs.Text仅提取纯文本,单元格内的格式(如加粗、颜色)会丢失,若需保留格式需额外处理段落的格式属性。- 若源表格存在合并单元格,
Cells集合会包含合并后的单元格,提取时需注意行列对应关系。
内容的提问来源于stack exchange,提问作者mathis_dukatz
相关产品推荐
相关产品推荐

