求修正PowerShell脚本:筛选NSG规则表中无黄/灰/空白单元格的行
修正PowerShell NSG规则表格检查脚本
原脚本存在几个核心问题导致未达到预期效果,以下是问题分析和修正后的脚本:
问题分析
- 颜色值格式错误:EPPlus的
BackgroundColor.Rgb返回纯RGB十六进制值(无Alpha通道前缀FF),原脚本使用ARGB格式颜色码,导致颜色判断失效。 - 行遍历范围冗余:直接遍历
$worksheet.Cells.Rows会包含所有空行,应限制在实际有数据的行范围内。 - 空白单元格判断逻辑不严谨:仅用
-not $cell.Value会漏掉含空白字符的单元格,需用更严格的空白判断。 - 样式继承未处理:单元格可能继承行/列样式,直接读取单元格自身样式无法获取实际生效的背景色。
修正后的脚本
# Load the EPPlus library Add-Type -Path "/home/lokesh/EPPlus.dll" # Replace with your EPPlus.dll path # Load the Excel file $filePath = "/home/lokesh/NSG_Rules.xlsx" $excelPackage = [OfficeOpenXml.ExcelPackage]::Load($filePath) # Get the first worksheet $worksheet = $excelPackage.Workbook.Worksheets[0] # Get valid row range (skip empty rows outside data area) $startRow = 1 $endRow = $worksheet.Dimension?.Rows ?? 1 # Function to get effective cell background color (handles style inheritance) function Get-CellBackgroundColor { param($cell) # Check cell's own style first, then row style, then column style $cellColor = $cell.Style.Fill.BackgroundColor.Rgb if (-not $cellColor) { $cellColor = $cell.Worksheet.Row($cell.Start.Row).Style.Fill.BackgroundColor.Rgb } if (-not $cellColor) { $cellColor = $cell.Worksheet.Column($cell.Start.Column).Style.Fill.BackgroundColor.Rgb } return $cellColor ?? "" } # Skip rows with yellow, gray, or blank/whitespace cells $rowsToKeep = @() for ($rowNum = $startRow; $rowNum -le $endRow; $rowNum++) { $skipRow = $false $row = $worksheet.Cells[$rowNum, 1..$worksheet.Dimension.Columns] foreach ($cell in $row) { $cellColor = Get-CellBackgroundColor $cell $isYellow = ($cellColor -eq "FFFF00") # RGB for yellow $isGray = ($cellColor -eq "A9A9A9") # RGB for gray $isBlank = [string]::IsNullOrWhiteSpace($cell.Text) if ($isYellow -or $isGray -or $isBlank) { $skipRow = $true break } } if (-not $skipRow) { $rowsToKeep += $row } } # Optional: Output or process the kept rows $rowsToKeep | ForEach-Object { $_.Cells.Value -join "`t" } # Clean up $excelPackage.Dispose()
关键修正点说明
- 颜色值修正:将黄色改为
FFFF00,灰色改为A9A9A9,匹配EPPlus返回的RGB格式。 - 有效行范围:通过
$worksheet.Dimension.Rows获取实际数据行的结束位置,避免遍历无意义的空行。 - 空白判断优化:使用
[string]::IsNullOrWhiteSpace($cell.Text)覆盖空白字符、空值、公式返回空等情况。 - 样式继承处理:新增
Get-CellBackgroundColor函数,优先读取单元格自身样式,再 fallback 到行、列样式,确保获取实际生效的背景色。
内容的提问来源于stack exchange,提问作者Lokesh M
相关产品推荐
相关产品推荐

