У меня большая проблема, которую я не могу понять, когда беру данные из листа Excel.
Я использую эту функцию для чтения данных (1 строка) из Excel, и она делает это правильно
function ExtractExcelRows {
[cmdletbinding()]
Param($ExcelFile)
# Excel.exe not autokill fix
$before = Get-Process | % { $_.Id }
$excel = New-Object -ComObject Excel.Application
$excelId = Get-Process excel | % { $_.Id } | ? { $before -notcontains $_ }
$workbook = $excel.Workbooks.Open($ExcelFile.FullName)
$sheet = $workbook.Worksheets.Item(1)
$excel.Visible = $false
$rowMax = ($sheet.UsedRange.Rows).Count
# Declare the starting positions
$rowEmail, $colEmail = 1, 11
$Rows = @()
for ($i=1; $i -le $rowMax-1; $i++) {
if ($sheet.Cells.Item($rowEmail+$i, $colEmail).Text) {
$Rows += @{
Email = $sheet.Cells.Item($rowEmail+$i, $colEmail).Text
}
}
}
$workbook.Close($false)
$excel.Quit()
Stop-Process -Id $excelId -Force
Write-Host $Rows.Count # count 1 row ! right!
return $Rows
}
Когда я пытаюсь сохранить свой объект в глобальной переменной, результат подсчета отличается, и я не понимаю, почему.
$global:ExcelData = ExtractExcelRows $ExcelFile
write-host $ExcelData.Count # count 4 row!!!! not right!
Может кто-нибудь сказать мне, где ошибка и как ее исправить?