Powershell 将表对象导出到CSV

Powershell 将表对象导出到CSV,powershell,csv,ms-word,Powershell,Csv,Ms Word,我们从word文档中提取了所需的表,但是有人可以帮助我们。。。这就是我如何将这个表对象$LETable导出为CSV,或者将我们在下面以CSV格式获取的值导出为表格式 $objWord = New-Object -Com Word.Application $filename = 'D:\Files\Scan1.doc' $objDocument = $objWord.Documents.Open($filename) $LETable = $objDocument.Tables.Item(4)

我们从word文档中提取了所需的表,但是有人可以帮助我们。。。这就是我如何将这个表对象
$LETable
导出为CSV,或者将我们在下面以CSV格式获取的值导出为表格式

$objWord = New-Object -Com Word.Application
$filename = 'D:\Files\Scan1.doc'
$objDocument = $objWord.Documents.Open($filename)

$LETable = $objDocument.Tables.Item(4)
$LETableCols = $LETable.Columns.Count
$LETableRows = $LETable.Rows.Count

$obj = New-Object -TypeName PSCustomObject

Write-Output "Starting to write... "

for($r=1; $r -le $LETableRows; $r++) {
    for($c=1; $c -le $LETableCols; $c++) {
        #Write-Host $r "x" $c
        $content = $LETable.Cell($r,$c).Range.Text
        Write-Host $content
    }
}
$objDocument.Close()
$objWord.Quit()
# Stop Winword Process
$rc = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objWord)

还没有准备好解决方案,但我没有更多的时间

脚本输出所有用双引号括起来的字段,每行用逗号分隔,并存储在变量$RAWSCSV中,然后将该变量传递给
convertfromCSV
我在单元格值中遇到了cr/lf和CHAR7的问题,我将其替换为零

## Q:\Test\2018\07\17\SO_51385204.ps1

$CsvName = '.\Test.csv'
$filename = (Get-Item ".\Test-text.docx").FullName
$tableNum = 4
$delimiter = ','

$objWord = New-Object -Com Word.Application
$objWord.Visible = $true # $false

$objDocument = $objWord.Documents.Open($filename)

$LETable = $objDocument.Tables.Item($tableNum)
$LETableCols = $LETable.Columns.Count
$LETableRows = $LETable.Rows.Count

Write-Output "Starting to write... "
# "Table rows:{0} cols:{1}" -f $LETableRows,$LETableCols

$RawCSV = for($r=1; $r -le $LETableRows; $r++) {
    $content= @()
    for($c=1; $c -le $LETableCols; $c++) {
        #Write-Host ("R:{0},C:{1}" -f $r,$c)
        $content += ("`"{0}`"" -f $LETable.Cell($r,$c).Range.Text -replace "(`r|`n|`t)|$([char]7)?")
    }
    $Content -join $delimiter
}
$Csv = $RawCSV | ConvertFrom-Csv

$objDocument.Close()
$objWord.Quit()
# Stop Winword Process
$rc = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objWord)

$Csv
$Csv | Export-Csv $CsvName -NoTypeInformation

模式如下:1)创建一个ArrayList来保存对象。2) 遍历表中的每一行并创建一个对象,该对象具有表中每个列的属性。3) 通过迭代该行中的所有单元格来填充属性。4) 将该对象添加到ArrayList。5) 继续,直到所有行都被迭代。6) 将ArrayList导出为CSV。@AnsgarWiechers我已删除VBA标记;这是一个PowerShell问题,世界上所有的VBA专家在这里都无法提供帮助,以免他们碰巧也知道PowerShell。@MathieuGuindon我专门添加了标签b/c这是一个(单词-)VBA问题,因为它是一个PowerShell问题。@AnsgarWiechers标签包含了这些信息。VBA是一种语言,而不是类型库。这里的语言是PowerShell…表的第一行是否包含要保留在csv中的标题(并且可以这样使用)?