我是powershell的新手程序员,我正在尝试做excel搜索和更改格式和字体选项。以下是我尝试搜索单词“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()
输入(test.xlsx)文件具有以下内容
Module | test | Status
ABC a PASSED
它安静的大文件,每个单元测试的状态不同。
答案 0 :(得分:1)
$row
是一个包含最后一行编号的字符串,与Length
循环中的for
属性进行比较会导致您陷入困境,因为它会给您带来麻烦你是字符串本身的长度。
将其更改为:
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)
以测试正确的单元格,并将单元格坐标转移到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
}
}