Excel 该值为空
我正试图根据这些数据创建一个do循环。它大约有39排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
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。这不是一个无休止的循环吗?您显示的代码没有功能。您应该发布工作代码,以便人们可以确定问题所在。瞧……如何创建最小的、可复制的示例-帮助中心-堆栈溢出-