#author("2025-11-14T16:20:26+09:00","","") #author("2025-11-17T15:04:00+09:00","","") [[ソフトウェア開発>SoftwareEngineering]] / [[PowerShell>PowerShell]] / [[ExcelHelper>./]] *ExcelHelper [#d3eb7421] #highlightjs([powershell]) # ---------------------------------------------------------- # 定数定義 # ---------------------------------------------------------- $EXCEL_EDGE_LEFT = 7 $EXCEL_EDGE_TOP = 8 $EXCEL_EDGE_BOTTOM = 9 $EXCEL_EDGE_RIGHT = 10 $EXCEL_CONTINUOUS = 1 $EXCEL_THIN = 2 # ---------------------------------------------------------- # 新しい Excel Application オブジェクトを構築します。 # ---------------------------------------------------------- function New-ExcelApplication { $excel = New-Object -ComObject Excel.Application return $excel } # ---------------------------------------------------------- # COM オブジェクトをメモリーから解放します。 # ---------------------------------------------------------- function Release-ExcelComObjectSafely { param ( $ComObject ) if ($null -eq $ComObject) { return } try { [System.Runtime.InteropServices.Marshal]::ReleaseComObject($ComObject) | Out-Null } catch { Write-Warning "COM オブジェクトの解放に失敗しました。:$_" } } # ---------------------------------------------------------- # 新しいブックを作成します。 # ---------------------------------------------------------- function Add-ExcelWorkbook { param ( $Excel ) return $Excel.Workbooks.Add() } # ---------------------------------------------------------- # 最初のワークシートを取得します。 # ---------------------------------------------------------- function Get-ExcelFirstWorksheet { param ( $Workbook ) return $Workbook.Worksheets.Item(1) } # ---------------------------------------------------------- # 最後のワークシートを取得します。 # ---------------------------------------------------------- function Get-ExcelLastWorksheet { param ( $Workbook ) $lastIndex = $Workbook.Workbooks.Count return $Workbook.Worksheets.Item($lastIndex) } # ---------------------------------------------------------- # セルの外枠に罫線を引きます。 # ---------------------------------------------------------- function Draw-ExcelOuterBorder { param ( $Range ) foreach ($bordersIndex in @($EXCEL_EDGE_LEFT, $EXCEL_EDGE_TOP, $EXCEL_EDGE_BOTTOM, $EXCEL_EDGE_RIGHT)) { $border = $Range.Borders.Item($bordersIndex) $border.LineStyle = $EXCEL_CONTINUOUS $border.Weight = $EXCEL_THIN Release-ExcelComObjectSafely $border } } # ---------------------------------------------------------- # セルの背景に色を塗ります。 # ---------------------------------------------------------- function Set-ExcelCellBackgroundColor { param ( $Range ,$Color ) $Range.Interior.Color = $Color } # ---------------------------------------------------------- # Excel の表示状態をリセットします。 # ---------------------------------------------------------- function Reset-ExcelViewState { param ( $Workbook ) foreach ($worksheet in $Workbook.Worksheets) { $worksheet.Activate() | Out-Null $worksheet.Range("A1").Select() | Out-Null Release-ExcelComObjectSafely $worksheet } $Workbook.Worksheets.Item(1).Activate() | Out-Null } # ---------------------------------------------------------- # RGB を Excel のカラー値に変換します。 # ---------------------------------------------------------- function Convert-ExcelRgbToColorValue { [CmdletBinding(DefaultParameterSetName='RGB')] param ( [Parameter(Mandatory = $true, ParameterSetName='RGB')] [ValidateRange(0, 255)] [int]$Red ,[Parameter(Mandatory = $true, ParameterSetName='RGB')] [ValidateRange(0, 255)] [int]$Green ,[Parameter(Mandatory = $true, ParameterSetName='RGB')] [ValidateRange(0, 255)] [int]$Blue ,[Parameter(Mandatory = $true, ParameterSetName='Hex')] [ValidatePattern('^[0-9A-Fa-f]{6}$')] [string]$HexColor ) if ($PSCmdlet.ParameterSetName -eq 'Hex') { $Red = [Convert]::ToInt32($HexColor.Substring(4, 2), 16) $Green = [Convert]::ToInt32($HexColor.Substring(2, 2), 16) $Blue = [Convert]::ToInt32($HexColor.Substring(0, 2), 16) } $colorValue = ($Blue -shl 16) -bor ($Green -shl 8) -bor $Red return $colorValue }