Значение равно null при передаче в качестве параметра


Я работаю над чтением из электронной таблицы excel в массовом формате некоторого текста. Когда я делаю что-то вроде следующего, все работает нормально.

Function Read-From-Excel {
    Param(
        [string]$fileName,
        [string]$sheetName="Sheet1"
    )

    $excelObject = New-Object -ComObject Excel.Application
    $excelObject.Visible = $FALSE
    $excelBook = $excelObject.Workbooks.Open($fileName)
    $excelSheet = $excelBook.Sheets.Item($sheetName)
    $intRowMax =  ($excelSheet.UsedRange.Rows).count

    $col = 1
    $row = 1

    $headers= @()

    While ($TRUE) {
        $column = $excelSheet.cells.Item($row, $col).Text
        If ($column -eq "") {
            Break
        }
        $headers += $column
        $col ++
    }

    $text = ""

    For ($row = 2; $row -le $intRowMax; $row++) {
        # Wrapped in another function starting here    
        $cell = $excelSheet.cells.Item($row, 1).Text

        If ($cell.StartsWith("#")) {
            $text += "-- {0}`n" -f $cell.substring(1)
        } Else {
            $c1 = $cell
            $c2 = $excelSheet.cells.Item($row, 2).Text -creplace 's+', ''
            $c3= $excelSheet.cells.Item($row, 3).Text -creplace 's+', ''
            $c4 = $excelSheet.cells.Item($row, 4).Text
            $c5 = $excelSheet.cells.Item($row, 5).Text

            $text += Format-Row $c1 $c2 $c3 $c4 $c5
        }
        # Until here
    }

    Write-Host $headers
    Write-Host $text
    $excelObject.quit()
}

Когда я заворачиваю внутренний раздел в функцию, однако, я получаю ошибку:

You cannot call a method on a null-valued expression.
At C:UsersdannnnodesktopFormatFromExcel.ps1:311 char:27
+     $cell = $excelSheet.cells.Item <<<< ($row, 1).Text
    + CategoryInfo               : InvalidOperation: (Item:String) [], RuntimeException
    + FullyQualifiedErrorId      : InvokeMethodOnNull

Эта функция выглядит следующим образом

Function _Get-Next-Block-Excel-File {
    Param(
        [Object[]]$sheet,
        [int]$row
    )

    # This is all the same, except with the name changed to $sheet
}

И исходный код изменил внутреннюю секцию, чтобы она выглядела как

$text += _Get-Next-Block-Excel-File $excelSheet $row

Существует ли специальный способ передачи этого параметра в PowerShell?

1 2

1 ответ:

Вам не нужен массив Object[] в качестве первого параметра в Function _Get-Next-Block-Excel-File, [Object]$sheet все будет хорошо, потому что вы не передаете массив листов в эту функцию.