【PowerShell】 Excelファイルの操作_読み込み

2024年2月12日PowerShell

Excelファイルの操作_読み込み


既存のExcelファイルから読み込む

Excelファイルを開いてテキストを読み込むコード

# Excelの初期処理
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$workbook = $excel.Workbooks.Open("C:\Path\To\ExcelFile.xlsx")
$worksheet = $workbook.Worksheets.Item(1)

# セルの読み込み処理
$cellValue = $worksheet.Cells.Item(1, 1).Value()

# 読み込んだ値の表示
Write-Host "セルA1: $cellValue"

# Excelの終了処理
$workbook.Close()
$excel.Quit()

# COMオブジェクトの解放
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($worksheet) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

# プロセスのクリーンアップ
Remove-Variable excel, workbook, worksheet

Excelファイルの表を読み込む

# Excelの初期処理
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$workbook = $excel.Workbooks.Open("C:\Path\To\ExcelFile.xlsx")
$worksheet = $workbook.Worksheets.Item(1)

$usedRange = $worksheet.UsedRange
$data = $usedRange.Value()

# 表の行数と列数を取得
$rowCount = $data.GetLength(0)
$columnCount = $data.GetLength(1)

# 表のデータを表示
for ($row = 1; $row -le $rowCount; $row++) {
    for ($col = 1; $col -le $columnCount; $col++) {
        Write-Host "Row $row, Column $col : $($data[$row, $col])"
    }
}

# Excelの終了処理
$workbook.Close()
$excel.Quit()

# COMオブジェクトの解放
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($worksheet) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

# プロセスのクリーンアップ
Remove-Variable excel, workbook, worksheet

処理の補足説明

$worksheet.UsedRange

  • Excelのワークシートで使用されている範囲を取得する

$data.GetLength()

  • 行数または列数の長さを取得
    • 行数: $data.GetLength(0)
    • 列数: $data.GetLength(1)

外部ファイルへの書き込みを伴う処理

Excelファイルから読み取った値をTSVファイルに書き込むコード

# Excelの初期処理
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Open("C:\Path\To\ExcelFile.xlsx")
$worksheet = $workbook.Worksheets.Item(1)

# 出力先のTSVファイルパス
$outputFilePath = "C:\Path\To\OutputFile.tsv"

# ワークシートの取得範囲を設定
$lastRow = $worksheet.UsedRange.Rows.Count
$lastColumn = $worksheet.UsedRange.Columns.Count

# ワークシートから値を読み込む
$tsvContent = @()
for ($row = 1; $row -le $lastRow; $row++) {
    $rowValues = @()
    for ($col = 1; $col -le $lastColumn; $col++) {
        $cellValue = $worksheet.Cells.Item($row, $col).Text
        $rowValues += $cellValue
    }
    $tsvContent += $rowValues -join "`t"
}

# TSVファイルにデータを書き込む
$tsvContent | Out-File -FilePath $outputFilePath -Encoding UTF8

# Excelの終了処理
$workbook.Close()
$excel.Quit()

# COMオブジェクトの解放
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($worksheet) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

# プロセスのクリーンアップ
Remove-Variable excel, workbook, worksheet

PowerShell

Posted by junichi