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

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS