Сценарий для чтения файлов Excel в Powershell не работает? - PullRequest
0 голосов
/ 08 июля 2019

Я хотел прочитать содержимое файла 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 голосов
/ 09 июля 2019

Попробуйте 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 не будет работать.Он пытается найти ВЕСЬ строку, против которой он обусловливает.Следовательно, если в ячейке есть другие строки данных, они не будут извлекать данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...