diff --git a/ConvertTo-ExcelXlsx.ps1 b/ConvertTo-ExcelXlsx.ps1 new file mode 100644 index 0000000..64d6c32 --- /dev/null +++ b/ConvertTo-ExcelXlsx.ps1 @@ -0,0 +1,50 @@ +Function ConvertTo-ExcelXlsx { +[CmdletBinding()] +PARAM +( + [parameter(Mandatory=$true, ValueFromPipeline)] + [string]$Path, + [parameter(Mandatory=$false)] + [switch]$Force +) + if(-Not ($Path | Test-Path) ){ + throw "File not found" + } + if(-Not ($Path | Test-Path -PathType Leaf) ){ + throw "Folder paths are not allowed" + } + + $xlFixedFormat = 51 #Constant for XLSX Workbook + $xlsFile = Get-Item -Path $Path + $xlsxPath = "{0}x" -f $xlsFile.FullName + + if($xlsFile.Extension -ne ".xls"){ + throw "Expected .xls extension" + } + + if(Test-Path -Path $xlsxPath){ + if($Force){ + try { + Remove-Item $xlsxPath -Force + } catch { + throw "{0} already exists and cannot be removed. The file may be locked by another application." -f $xlsxPath + } + Write-Verbose $("Removed {0}" -f $xlsxPath) + } else { + throw "{0} already exists!" -f $xlsxPath + } + } + + try{ + $Excel = New-Object -ComObject "Excel.Application" + } catch { + throw "Could not create Excel.Application ComObject. Please verify that Excel is installed." + } + + $Excel.Visible = $false + $Excel.Workbooks.Open($xlsFile.FullName) | Out-Null + $Excel.ActiveWorkbook.SaveAs($xlsxPath, $xlFixedFormat) + $Excel.ActiveWorkbook.Close() + $Excel.Quit() +} +