param( [string]$RawDirectory = "$(Split-Path -Parent $PSScriptRoot)\data\raw\gansu\2024", [string]$OutputDirectory = "$(Split-Path -Parent $PSScriptRoot)\data\processed\gansu\2024\csv" ) $ErrorActionPreference = 'Stop' New-Item -ItemType Directory -Force -Path $OutputDirectory | Out-Null $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false try { Get-ChildItem -LiteralPath $RawDirectory -Filter '*.xls' | ForEach-Object { $workbook = $excel.Workbooks.Open($_.FullName) try { $worksheet = $workbook.Worksheets.Item(1) $usedRange = $worksheet.UsedRange $matrix = $usedRange.Value2 $rows = for ($row = 1; $row -le $usedRange.Rows.Count; $row++) { $record = [ordered]@{ row_number = $row } for ($column = 1; $column -le $usedRange.Columns.Count; $column++) { $record["col$column"] = $matrix[$row, $column] } [pscustomobject]$record } $target = Join-Path $OutputDirectory ($_.BaseName + '.csv') $rows | Export-Csv -LiteralPath $target -NoTypeInformation -Encoding utf8 } finally { $workbook.Close($false) } } } finally { $excel.Quit() [Runtime.InteropServices.Marshal]::ReleaseComObject($excel) | Out-Null }