わざわざ、powershellでExcel作らせる理由

ふと、ウインドウを開いて、貼り付けて、Exactして・・・が面倒臭かった。

例えば、諸々の事情でCSVを出して比較しなきゃいけない時、貼り付けるのも面倒だった・・・。

スクリプトが書けるとは、作業のIOがわかっているということ、と先輩に教えてもらった。

あぁ、整理できていなかったんだなぁと反省だ。

例えば、JSONのデータだけど、エビデンスはCSVにしなければならない場合などは、どうするか?

# JSONファイルが格納されているディレクトリ
$jsonDirectory = "C:\path\to\your\json_files"

# 実行時刻を含む出力CSVファイルのパス
$timestamp = (Get-Date).ToString("yyyyMMdd_HHmmss")
$csvFilePath = "C:\path\to\your\output_$timestamp.csv"

# JSONフォルダ内の最初のJSONファイルを取得
$jsonFile = Get-ChildItem -Path $jsonDirectory -Filter *.json | Select-Object -First 1

# JSONファイルが存在する場合、データを抽出
if ($jsonFile) {
    # JSONファイルを読み込んでオブジェクトに変換
    $jsonData = Get-Content -Path $jsonFile.FullName | ConvertFrom-Json
    
    # HEADER.TITLEを取得
    $headerTitle = if ($jsonData.HEADER) { $jsonData.HEADER.TITLE } else { $null }

    # LAYOUTが配列かどうかを確認し、各要素を展開
    $flattenedData = @()
    if ($jsonData.LAYOUT -is [System.Collections.IEnumerable]) {
        foreach ($layoutItem in $jsonData.LAYOUT) {
            $flattenedData += [PSCustomObject]@{
                "HEADER.TITLE"   = $headerTitle
                "LAYOUT.NAME"    = $layoutItem.NAME
                "LAYOUT.CONTENT" = $layoutItem.CONTENT
            }
        }
    } else {
        # LAYOUTが配列でない場合
        $flattenedData += [PSCustomObject]@{
            "HEADER.TITLE"   = $headerTitle
            "LAYOUT.NAME"    = if ($jsonData.LAYOUT) { $jsonData.LAYOUT.NAME } else { $null }
            "LAYOUT.CONTENT" = if ($jsonData.LAYOUT) { $jsonData.LAYOUT.CONTENT } else { $null }
        }
    }

    # フラット化されたデータをCSVにエクスポート
    $flattenedData | Export-Csv -Path $csvFilePath -NoTypeInformation -Encoding UTF8
    Write-Output "CSVファイルが生成されました: $csvFilePath"
} else {
    Write-Output "JSONファイルが見つかりませんでした。"
}

検証しないとアレだけれど、ひとまず、手打ちやExcelに貼り付けからは解放されそうだ。転記は機械に任せればいいのだ。

ショートカットでガチャガチャやっていたけど、どうなんだろうと思ってしまった次第だった。

挙動は未確認のため、検証後修正します。

コメント

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