繁体   English   中英

Powershell脚本以匹配Excel单元格值的条件

[英]Powershell script to match condition of excel cell values

我是Powershell的新手程序员,我正在尝试执行excel搜索以及更改格式和字体选项。 这是我正在尝试搜索“通过”一词并将其颜色更改为绿色和粗体的代码段,当前代码确实退出了而未按预期更改,这是我不知道的错误所在,需要帮助这方面。

  $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

它安静着一个巨大的文件,每个单元测试的状态不同。

$row是一个包含最后一个行号的字符串,与其在for循环中的Length属性相比,这会给您带来麻烦,因为它将给您字符串本身的长度。

更改为:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM