PowerShell脚本来匹配Excel单元格值的条件

我是PowerShell的新手程序员,我正在尝试执行excelsearch和更改格式和字体选项。 这里是我正在尝试search单词“PASSED”,并将颜色更改为绿色和大胆的代码段,目前的代码确实退出了,而不会像预期的那样改变什么是错误的,我无法弄清楚,需要帮助这方面。

$excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $False $workbook = $excel.Workbooks.Open("C:\test.xlsx") $sheet = $workbook.ActiveSheet $xlCellTypeLastCell = 11 $used = $sheet.usedRange $lastCell = $used.SpecialCells($xlCellTypeLastCell) $row = $lastCell.row # goes to the last used row in the worksheet for ($i = 1; $i -lt $row.length; $i++) { If ($sheet.cells.Item(1,2).Value() = "PASSED") { $sheet.Cells.Item(1,$i+1).Font.ColorIndex = 10 $sheet.Cells.Item(1,$i+1).Font.Bold = $true } } $workbook.SaveAs("C:\output.xlsx") $workbook.Close() 

input(test.xlsx)文件具有以下内容

 Module | test | Status ABC a PASSED 

它安静的每个unit testing不同状态的巨大文件。

$row是一个包含最后一个行号的string,与for循环中的Length属性相比,它会给你带来麻烦,因为它会给你string本身的长度。

将其更改为:

 for ($i = 1; $i -lt $row; $i++) { 

在循环内部的if语句中,还有另一个问题: =

为了比较两个值是否相等,请使用-eq运算符而不是==仅用于赋值):

 if ($sheet.cells.Item($i,2).Value() -eq "PASSED") { $sheet.Cells.Item(1,$i+1).Font.ColorIndex = 10 $sheet.Cells.Item(1,$i+1).Font.Bold = $true } 

最后,Excel单元格引用不是从零开始的,所以Item(1,2)将引用在你的例子中的值为“test”的单元格(请注意它是如何将一行作为第一个参数的,第二)。 将其更改为Item(2,3)以便对正确的单元格进行testing,并将if单元格内的单元格坐标转置。

你可能想要更新for循环来反映这个:

 for ($i = 2; $i -le $row; $i++) { if ($sheet.cells.Item($i,3).Value() = "PASSED") { $sheet.Cells.Item($i,3).Font.ColorIndex = 10 $sheet.Cells.Item($i,3).Font.Bold = $true } }