Excel 该值为空

Excel 该值为空,excel,powershell,Excel,Powershell,我正试图根据这些数据创建一个do循环。它大约有39排 ID startdate 1 2020-1-1 这是到目前为止我的代码 Do { $row1 = 9 $tb2 = @() if ($ws3.cells.Item($row1, 11).Value() -eq $ws1.Cells.Item(6, 8).Value()){ dt2 =@{ VesselID = [int] $ws1.Cells.Item(6, 3).Value

我正试图根据这些数据创建一个do循环。它大约有39排

ID         startdate
1          2020-1-1
这是到目前为止我的代码

Do {
  $row1 = 9
  $tb2 = @() 
   if ($ws3.cells.Item($row1, 11).Value() -eq $ws1.Cells.Item(6, 8).Value()){
    dt2 =@{
    VesselID = [int] $ws1.Cells.Item(6, 3).Value2
        CrewId = [System.String] $ws3.Cells.Item($row1, 3).Value2
        SignOnVessel_Date = [datetime]::FromOADate($ws3.Cells.Item($row1, 11).Value2)
    }
    $Input2 = New-Object System.Object -property $dt2
    $tb2 += $Input2
    $row1++
    }else {
    $row1++
    }
  }Until ($row1 -eq 39)

但当我运行脚本时,它会说if函数的值为null。有人能帮我吗?

当然无法检查您从工作表中收集的内容是否正确,但这主要是关于您出错的逻辑

然后是一个输入错误
dt2=@{
,您忘记了变量名前面的美元符号
$

如果要使用
do{..}Until(..)
循环执行此操作,则需要初始化循环上方的计数器变量
$row1
。 另外,由于在每次迭代中将
$tb2=@()
重置为空数组,因此不会得到任何结果

最佳做法是不要使用数组,而是使用
+=
向其中添加元素,因为它每次都会以内存和性能为代价重新创建整个数组

试试这个

$row1 = 9
$tb2 = Do {
    if ($ws3.cells.Item($row1, 11).Value() -eq $ws1.Cells.Item(6, 8).Value()) {
        # just output a PSObject here, it will be captured in variable $tb2
        [PsCustomObject]@{
            VesselID          = [int] $ws1.Cells.Item(6, 3).Value2
            CrewId            = [string] $ws3.Cells.Item($row1, 3).Value2
            SignOnVessel_Date = [datetime]::FromOADate($ws3.Cells.Item($row1, 11).Value2)
        }
    }
    # increment $row1 regardless if we have output an object or not
    $row1++
} Until ($row1 -eq 39)
或者在这里可能更有效,使用
for()
循环:

$tb2 = for ($row1 = 9; $row1 -lt 40; $row1++) {
    if ($ws3.cells.Item($row1, 11).Value() -eq $ws1.Cells.Item(6, 8).Value()) {
        # just output a PSObject here, it will be captured in variable $tb2
        [PsCustomObject]@{
            VesselID          = [int] $ws1.Cells.Item(6, 3).Value2
            CrewId            = [string] $ws3.Cells.Item($row1, 3).Value2
            SignOnVessel_Date = [datetime]::FromOADate($ws3.Cells.Item($row1, 11).Value2)
        }
    }
}

也许我遗漏了一些东西,但代码会在每次迭代时将行1设置为9。这不是一个无休止的循环吗?您显示的代码没有功能。您应该发布工作代码,以便人们可以确定问题所在。瞧……如何创建最小的、可复制的示例-帮助中心-堆栈溢出-