Powershell中的Excel文件阅读器脚本不起作用?

时间:2019-07-08 19:37:08

标签: excel powershell

我想读取Excel文件的内容,然后将其输出到文本文件。目前,我的代码仅将结果输出到控制台。

我试图编写代码,以获取适用的列,然后将它们加载到数组中以供稍后写入控制台。

$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $False
$PLACE = "C:\Somepath\somename.xlsx"
$OpenFile = $Excel.Workbooks.Open($PLACE)
$Workbook = $OpenFile.Worksheets
$Worksheet = $Workbook.Item(1)

# Get the values for each column
$MNumber = $Worksheet.Cells | where {$_.value2 -eq "Material-Number"} | select -First 1
$MDescription = $Worksheet.Cells | where {$_.value2 -eq "Material-Description"} | select -First 1

# Get the values for each row in Material Number 
$NumValues = @()
$NumValues = for($i=2; $MNumber.Cells.Item($i).Value2 -ne $null; $i++  ){
    $MNumber.Cells.Item($i)
}

# Get the values for each row in Material Description
$DescValues = @()
$DescValues = for($i=2; $MDescription.Cells.Item($i).Value2 -ne $null; $i++  ){
    $MDescription.Cells.Item($i)
}

$NumValues | ForEach-Object {Write-host $_.value2}
$DescValues | ForEach-Object {Write-Host $_.value2}

在过程结束之前,没有任何输出到控制台。即使这些是确切的列,并且每一列都包含数据。

1 个答案:

答案 0 :(得分:0)

在此处尝试用match代替eq

$MNumber = $Worksheet.Cells | where {$_.value2 -match "Material-Number"} | select -First 1 $MDescription = $Worksheet.Cells | where {$_.value2 -match "Material-Description"} | select -First 1

我不确定$_.value2上的单元格中是否包含其他字符串,但是如果确实如此,eq将不起作用。它试图找到要作为条件的整个字符串。因此,如果单元格中还有其他数据字符串,则不会提取数据。