• 締切済み

PowerShellでExcel操作をする

昔、水平タブ区切りの集計データをコピーし下記のVBSでExcelに貼り付けグラフ化する事をしていました。 今回PowerShellで同じようなことができないかと思い挑戦しています。簡単なExcel操作はなんとかなりますが範囲の取得やそれを利用した指定等を組み込んだ場合上手く行きません。 そこで下記のVBSで行ったExcel操作をPowerShellで実現する方法をお教えください。 Option Explicit Dim ex,eb,eg,sD,chart,newChartObject ' Excel起動 Set ex=CreateObject("Excel.Application") ex.Visible=True ' ワークブックを追加 Set eg=ex.Application.Workbooks.Add() Set eb=eg.Sheets(1) ' 新規グラフ(座標は、グラフのエリア) Set chart =eb.ChartObjects() Set newChartObject = chart.Add(300, 100, 400, 300) ' グラフデータを代入 eb.Range("A3").PasteSpecial ' グラフデータをの範囲取得(最終行及び最終列) sD = eb.Range("B3").End(-4121).Row eb.Range("B3").Resize(sD-1, 1).NumberFormatLocal = "#,###" eb.Range("D4").Resize(sD-3, 1).NumberFormatLocal ="0.00%" ' 参照範囲の設定 ex.ActiveSheet.ChartObjects("グラフ 1").Activate ex.ActiveChart.SetSourceData eb.Range("A3").Resize(sD-2 , 2) ex.ActiveChart.SeriesCollection(1).Values = eb.Range("B4").Resize(sD-3 , 1) ex.ActiveChart.SeriesCollection(1).Name =eb.Range("B3") ex.ActiveSheet.ChartObjects(1).Chart.ChartStyle = 32 '第2データの指定 ex.ActiveChart.SeriesCollection(2).ChartType = 4 '折れ線グラフ ex.ActiveChart.SeriesCollection(2).Values = eb.Range("D4").Resize(sD-3 , 1) ex.ActiveChart.SeriesCollection(2).AxisGroup = 2 ex.ActiveChart.SeriesCollection(2).Name =eb.Range("D3") Set eg=Nothing Set eb=Nothing Set ex=Nothing 宜しくお願いします。

みんなの回答

  • NuboChan
  • ベストアンサー率47% (785/1650)
回答No.1

>VBSで行ったExcel操作をPowerShellで実現する方法 回答が付かないので思ったことを記載します。 個人的には、EXCELに引き継ぐ巨大なDATA(CSV)をPowerShellで加工するような操作を行っています。 (PowerShellは門外漢なのでほとんど他力本願ですが。。。。) なぜわざわざPowerShellで実行したいのですか? コードを見た感じですがコードのどこをPowerShellに置き換えるのかイメージできません。

turu575
質問者

補足

>なぜわざわざPowerShellで実行したい wikからVBScriptの項目から抜粋 マイクロソフトは2000年代初頭から ActiveX に変わる戦略として、.NET戦略を打ち立てており、ASPも2002年にリリースされたASP.NETに置き換えられ、その記述言語も C# や Visual Basic .NET 等となった。また、オペレーティングシステムの汎用スクリプト環境についてもWSHから Windows PowerShell へ移行すると言う。 別にこれが理由ではなく単にやってみたいだけです。ちなみに単純なグラフは下記のコードでグラフ化はできましたがVBSで作った棒グラフと折れ線の2軸グラフの作成迄はまだまだです。 $excel = New-Object -ComObject Excel.Application $excel.Visible = $true $book = $excel.Workbooks.Add() $sheet = $excel.Worksheets.Item(1) $sheet.Range("B2") = "月別売上" $sheet.Range("B3").PasteSpecial($exlpasteType::xlPasteValues) $objRange = $sheet.usedRange $a = $objRange.SpecialCells(11).row $b = $objRange.SpecialCells(11).column $tableRange = $sheet.Range($sheet.Cells.Item(3,2),$sheet.Cells.Item($a,$b)) $tableRange.Borders.LineStyle = $True $posX, $posY = 300, 100 $width, $height = 500, 400 $chart = $sheet.ChartObjects().Add($posX, $posY, $width, $height).Chart $chart.SetSourceData($tableRange) | Out-Null

関連するQ&A