この記事ではPowerShellでExcelから様々な形式で値を取得してみます。
逆にExcelのセルへ格納する方法は別記事で紹介していますので、興味があればご覧いただければと思います。
仕様
下記のようなExcelファイルを用意して、PowerShellから様々な値を取得してみます。
実行結果はページの一番最後にあります。
画面上は結果しか見えませんが、B4には「=3+4」の数式、B5にはSUM関数が格納されています。
- 編集先Excelファイルの格納先:C:\temp\powershell
- ファイル名:Book2.xlsx
- シート名:Sheet1
ソースコード
ソースコードを以下に示します。
Excelから様々な値を取得して、Write-Hostで標準出力に出力してみます。
ただし、エラー処理は本筋とは異なるため、このソースコード内では省略しています。
readExcel.ps1
$excel = New-Object -ComObject Excel.Application
$book = $null
$excel.Visible = $false
$excel.DisplayAlerts = $false
$currentPath = "C:\temp\powershell\Book2.xlsx"
$book = $excel.Workbooks.Open($currentPath)
$sheet = $book.Sheets("Sheet1") # シート名で操作
#$sheet = $book.Sheets(1) # インデックスも可能
# 文字列取得
$cell = $sheet.Cells.Item(1, 2) # Cells(行・列番号)版
Write-Host ("B1-文字列-CELL: " + $cell.Value())
$range = $sheet.Range("B2") # Range版
Write-Host ("B3-文字列-RANGE: " + $range.Value())
# 数字取得
$range = $sheet.Range("B3")
Write-Host ("B3-数字: " + $range.Value())
# 数式取得
$range = $sheet.Range("B4")
Write-Host ("B4-数式: " + $range.Formula())
$range = $sheet.Range("B4")
Write-Host ("B4-数式(計算結果): " + $range.Value()) # 数式の計算結果
# 関数取得
$range = $sheet.Range("B5")
Write-Host ("B5-関数: " + $range.Formula())
$range = $sheet.Range("B5")
Write-Host ("B5-関数(計算結果): " + $range.Value()) # 関数の計算結果
# セル結合された個所の値の取得
$range = $sheet.Range("B6")
Write-Host ("B6-セル結合: " + $range.Value())
[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
文字列
~.Value()で取得します。()を付加するのがポイントです。
文字列の取得(Cells)
$cell = $sheet.Cells.Item(1, 2)
Write-Host ("B1-文字列-CELL: " + $cell.Value())
文字列の取得(Range)
$range = $sheet.Range("B2")
Write-Host ("B3-文字列-RANGE: " + $range.Value())
以降はRangeのみ記述しますが、Cellsで記述しても同じです。
数字
数字も文字列と値の取得の方法は変わりはないです。
$range = $sheet.Range("B3")
Write-Host ("B3-数字: " + $range.Value())
数式
「~.Formula()」で数式を取得することができます。
$range = $sheet.Range("B4")
Write-Host ("B4-数式: " + $range.Formula())
数式の計算結果は「~.Value()」で取得できます。
$range = $sheet.Range("B4")
Write-Host ("B4-数式(計算結果): " + $range.Value())
関数
関数も数式と同じで「~.Formula()」で数式を取得することができます。
$range = $sheet.Range("B5")
Write-Host ("B5-関数: " + $range.Formula())
関数の計算結果は「~.Value()」で取得できます。
$range = $sheet.Range("A5")
Write-Host ("B5-関数(計算結果): " + $range.Value()) # 関数の計算結果
セル結合の箇所
結合セルの最初のセルから取得すればOKです。
$range = $sheet.Range("B6")
Write-Host ("B6-セル結合: " + $range.Value())
テスト実行
下記の通りps1ファイルとしてソースコードを保存しておきます。
Write-Hostされた結果を見たいので、PowerShellのウィンドウからコマンドを実行します。
以下のようなコマンドで*.ps1に記述したPowerShellファイルを実行します。
powershell -ExecutionPolicy RemoteSigned -File "readExcel.ps1"
実行すると全て意図したとおりに、値が取得できたことが確認できました。
参考情報
環境
下記の環境で実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | PowerShell | 5.1 |
以上です。
コメント