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 } }