0

亲爱的 Stackoverflow(ers),

我对 powershell 和 Excel 有一个小问题。我有一个包含多行和文本的 excel 文件。我想阅读每一列并将内容放入一个数组中。我的脚本有效,但是当我显示数组的内容时,开头总是有一个 0。我的 Excel 文件或脚本有问题吗?

    $a = New-Object -comobject Excel.Application
    $a.Visible = $true
    $a.DisplayAlerts = $False

    $Workbook = $a.workbooks.open("C:\test.xls")
    $Sheet = $Workbook.Worksheets.Item("Auto")

       $row            = [int]2
       $KN             = @() # beginnt bei 2,1... 3,1... 4,1
       Do {$KN        += $Sheet.Cells.Item($row,1).Text ; $row = $row + [int]1} until (!$Sheet.Cells.Item($row,1).Text)

   $Workbook.Close()
   $a.Quit()
   [System.Runtime.Interopservices.Marshal]::ReleaseComObject($a)

   Write-Output $KN

输出:

0
7
7
7
7
7

Excel 文件如下所示:

A    B    C    D
7
7
7
7
7
7

我想这是我的数组的一些简单错误,但我找不到它!谢谢!

Edit1:问题在于:

  $KN = @()

因为如果我停止用我的 Exceldata 填充数组,它会继续显示 0。

Edit2:好的,这变得很奇怪。如果我输入 $KN,在再次查看内容的 Script 之后,它会显示没有 0 的正确内容。它来自哪里,为什么会在那里?当我手动查看数组时,为什么它消失了?

4

2 回答 2

3

找到了!最后!从来没想过,对这个帖子感到抱歉!

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($a) 

写了 0。在我的脚本中,它看起来像是来自写输出!

于 2013-09-27T10:09:39.287 回答
0

如果 ReleaseComObject($a) 成功,它会像大多数其他函数一样写出一个“0”,因此要进行修复只需将管道和 Out-Null 添加到像这样 System.Runtime.Interopservices.Marshal::ReleaseComObject($a) 的语句中| 外空

于 2018-11-15T15:25:47.567 回答