簡體   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