mDIS LogomDIS User Documentation
Home
Table of Contents
Source Code
Home
Table of Contents
Source Code
  • Powershell-CsvAsExcel

Powershell-CsvAsExcel

Save this code block as Save-CsvAsExcel.ps1 .

# source: https://github.com/gangstanthony/PowerShell/blob/master/Save-CSVasExcel.ps1
# knb 20190807
function Save-CSVasExcel {
    param (
        [string]$CSVFile = $(Throw 'No file provided.')
    )

    BEGIN {
        function Resolve-FullPath ([string]$Path) {
            if ( -not ([System.IO.Path]::IsPathRooted($Path)) ) {
                # $Path = Join-Path (Get-Location) $Path
                $Path = "$PWD\$Path"
            }
            [IO.Path]::GetFullPath($Path)
        }

        function Release-Ref ($ref) {
            ([System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$ref) -gt 0)
            [System.GC]::Collect()
            [System.GC]::WaitForPendingFinalizers()
        }

        $CSVFile = Resolve-FullPath $CSVFile
        $xl = New-Object -ComObject Excel.Application
    }

    PROCESS {
        $wb = $xl.workbooks.open($CSVFile)
        $xlOut = $CSVFile -replace '\.csv$', '.xlsx'

        # can comment out this part if you don't care to have the columns autosized
        $ws = $wb.Worksheets.Item(1)
        $range = $ws.UsedRange
        [void]$range.EntireColumn.Autofit()

        $num = 1
        $dir = Split-Path $xlOut
        $base = $(Split-Path $xlOut -Leaf) -replace '\.xlsx$'
        $nextname = $xlOut
        while (Test-Path $nextname) {
            $nextname = Join-Path $dir $($base + "-$num" + '.xlsx')
            $num++
        }

        $wb.SaveAs($nextname, 51)
    }

    END {
        $xl.Quit()

        $null = $ws, $wb, $xl | % {Release-Ref $_}

        # del $CSVFile
    }
}