PowerShellによりExcelファイルのシートの色を変更するサンプルコードを紹介します。
Web上で類似ソースが意外に見つからなかったので、VBAのサイトを見ていろいろ試しました。
仕様
以下のようなExcelファイルを用意して、PowerShellからシートの色を変えてみます。
なお、実装方法はいくつかあります。
IndexColorプロパティ版
IndexColorによりSheet1の色を設定します。
一番記述が簡単です。
たまにWeb上で出てくるサンプルもこの方法が多く、最も一般的な方法なのかと思われます。
ソースコード
setSheetColorColorIndex.ps1
$excel = New-Object -ComObject Excel.Application
$book = $null
$excel.Visible = $false
$excel.DisplayAlerts = $false
$fileName = "Book1.xlsx"
$filePath = (Convert-Path .) + "/" + $fileName
$book = $excel.Workbooks.Open($filePath)
$sheet = $book.Sheets("Sheet1")
# ColorIndexによる指定(赤)
$sheet.Tab.ColorIndex = 3
[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
Pause
色を変える場合は以下のようなColorIndexの行の数字を変えます。
$sheet.Tab.ColorIndex = 3
ColorIndexの数字の一覧はGoogle検索したらMicrosoftの公式ページがヒットします。
上記ではColorIndex=3(赤色)のコードとなっています。
実行
実行は右クリックメニューの「PowerShellで実行」をクリックします。
実行すると以下のようにSheet1のシートが赤色になりました。
Colorプロパティ版(色名指定)
この方法は色名を英語で指定するだけで分かりやすいです。
ソースコード
setSheetColorColorName.ps1
Add-Type -AssemblyName System.Drawing
$excel = New-Object -ComObject Excel.Application
$book = $null
$excel.Visible = $false
$excel.DisplayAlerts = $false
$fileName = "Book1.xlsx"
$filePath = (Convert-Path .) + "/" + $fileName
$book = $excel.Workbooks.Open($filePath)
$sheet = $book.Sheets("Sheet1")
# Colorによる指定
$sheet.Tab.Color = [System.Drawing.Color]::Blue # 青
[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
Pause
色を変更したい場合は以下のような~::Blueの部分を別の色にすればよいです。
$sheet.Tab.Color = [System.Drawing.Color]::Blue # 青
一般的な色を示す英語であれば、直観的にできるかと思います。
実行
実行は右クリックメニューの「PowerShellで実行」をクリックします。
実行すると以下のようにSheet1のシートが青色になりました。
Colorプロパティ版(RGB)
細かい色の調整ができます。
ソースコード
setSheetColorColorRGB.ps1
Add-Type -AssemblyName System.Drawing
$excel = New-Object -ComObject Excel.Application
$book = $null
$excel.Visible = $false
$excel.DisplayAlerts = $false
$fileName = "Book1.xlsx"
$filePath = (Convert-Path .) + "/" + $fileName
$book = $excel.Workbooks.Open($filePath)
$sheet = $book.Sheets("Sheet1")
# Colorによる指定
$sheet.Tab.Color = [System.Drawing.Color]::FromArgb(0, 255, 0) # 緑
[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
Pause
この方法はRGBで細かい色指定ができます。
色を変えたい場合は、以下の指定の数字を微調整します。
$sheet.Tab.Color = [System.Drawing.Color]::FromArgb(0, 255, 0) # 緑
ただシート名の色の微調整がそこまで需要があるかなあ・・・
というのはあるので、話し合いで
「ColorIndexという一般的によく使われる色はあらかじめ定義されているので~このオレンジか緑で~」
みたいに決めたいところですけどね。
実行
実行は右クリックメニューの「PowerShellで実行」をクリックします。
実行すると以下のようにSheet1のシートが緑色になりました。
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | PowerShell | 5.1 |
以上です。