PowerShellによるExcel操作ーセルの値を取得ーサンプルコード(様々な取得)

記事内に広告が含まれています。

この記事では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.環境バージョン
1OSWindows10
2PowerShell5.1
環境一覧

以上です。

コメント

タイトルとURLをコピーしました