我想读取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}
在过程结束之前,没有任何输出到控制台。即使这些是确切的列,并且每一列都包含数据。
答案 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
将不起作用。它试图找到要作为条件的整个字符串。因此,如果单元格中还有其他数据字符串,则不会提取数据。