csvデータを取り込んでExcelで折れ線グラフを生成するPowerShell
PowerShellで以下を実現する文の紹介としてサンプルプログラムを作成しました。
・Excelのセルに値を入れる
・Excelのグラフ(折れ線グラフ)を作成
・PowerShellでExcelを扱う際の「Cells」の使い方
# # csvからExcelでグラフを生成するPowerShell # ########## 値を変更する変数 ########## # Excelファイル名 $fileName = "Test.xlsx" # Excelシート名 $sheetName = "Test" ## 情報CSVファイル名 $csvFName = "Test.csv" ###################################### # ファイルのパスを取得 $scriptPF = $MyInvocation.MyCommand.Path $scriptPath = Split-Path -Parent $scriptPF $flExcelPF = $scriptPath + "\" + $fileName # Excelファイルが存在する場合に処理 if (Test-Path $flExcelPF) { # Excelのオープン $objExcelAp = New-Object -ComObject Excel.Application $objExcelAp.Visible = $true $objExcelBook = $objExcelAp.Workbooks.Open($flExcelPF) $objExcelSheet = $objExcelBook.Worksheets.Item($sheetName) # データを取り込み、編集 ## CSVファイル読み込み $headerStr = "ddf01,ddf02,ddf03,ddf04,ddf05" $headerSplit = $headerStr -split "," $csvObj = Get-Content $csvFName | ConvertFrom-Csv -Header $headerSplit ## 初期値、先頭行設定 $nCount = 1 $objExcelSheet.Cells.Item(2, 1) = "No." $objExcelSheet.Cells.Item(2, 2) = "Score" ## CSV1件ごとに処理 $csvObj | ForEach-Object { ## データ編集 $objExcelSheet.Cells.Item(2 + $nCount, 1) = $nCount $objExcelSheet.Cells.Item(2 + $nCount, 2) = $_.ddf03 $nCount++ } # データをグラフ化 $strRange = "A2:B" + (1 + $nCount) $dataRange = $objExcelSheet.Range($strRange) $chartObjects = $objExcelSheet.ChartObjects() $newChartObject = $chartObjects.Add(120, 10, 700, 300) $MyChart = $newChartObject.Chart $MyChart.ChartType = 4 $MyChart.SetSourceData($dataRange) $MySeries = $MyChart.SeriesCollection(1) $MySeries.Delete() | Out-Null # ファイルの保存、閉じてExcelの終了 $objExcelBook.Save() $objExcelAp.Quit() # プロセスの解放 .{ [System.Runtime.Interopservices.Marshal]::ReleaseComObject($MyChart) $MyChart = $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($newChartObject) $newChartObject = $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($chartObjects) $chartObjects = $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcelSheet) $objExcelSheet = $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcelBook) $objExcelBook = $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcelAp) $objExcelAp = $null } | Out-Null # ガベージコレクトの明示実行 [GC]::Collect() [GC]::WaitForPendingFinalizers() [GC]::Collect() }
csvファイルの項目名「ddf01~ddf05」は、現行システム(個人的に趣味で作成した)のデータが5つ項目を持っていて、
3番目の「点数」をグラフ化したかったのでこのような構成になっています。
横軸もただのナンバリングです。
ChartType = 4については以下のURLを参考に設定しています。(ありがとうございます)
http://officetanaka.net/excel/vba/graph/06.htm
「PowerShellで折れ線グラフ生成」は元々他のフリーで公開されているツールと組み合わせて実現していたのですが、
パソコンを買い替えたときにそのツールを再設定するのが面倒になって、
自分のパソコンライフスタイル上ほぼ確実に入れることになるExcelでやる方針にしました。