XLS na XLSX pomocí Powershell

Převod souborů XLS na XLSX

Měl jsem problém se zpracováním excelu vytvořeném ve staré verzi office 97. PHP Excel se s tímto souborem nedokázal poprat. Načítal pouze strukturu sešitů, ale obsah žádné buňky vrátit nedokázal.

Po několika chvílích googlením na fórech phpExcelu jsem se rozhodil jít na to jinou cestou - převést všechny soubory, které chci načítat do nového formátu XLSX.

K tomuto se přesně hodí PowerShell viz funkce níže.

function ConvertTo-XLSX { [cmdletbinding()] param ( [parameter(mandatory=$true)][string]$Path, [parameter(mandatory=$false)][switch]$Visible, [parameter(mandatory=$false)][string]$ToFolder ) begin { $xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault $Excel = New-Object -ComObject excel.application if ($Visible -eq $true) { $Excel.visible = $true } else { $Excel.visible = $false } $filetype = "*xls" } process { if (Test-Path -Path $Path) { Get-ChildItem -Path $Path -Include '*.xls' -recurse | ForEach-Object { if ($ToFolder -ne '') { $FilePath = Join-Path $ToFolder $_.BaseName $FilePath += ".xlsx" } else { $FilePath = ($_.fullname).substring(0, ($_.FullName).lastindexOf(".")) $FilePath += ".xlsx" } $WorkBook = $Excel.workbooks.open($_.fullname) $WorkBook.saveas($FilePath, $xlFixedFormat) $WorkBook.close() $OldFolder = $Path.substring(0, $Path.lastIndexOf("\")) + "\old" } } else { return 'No path provided or access has been denied.' } } end { $Excel.Quit() $Excel = $null [gc]::collect() [gc]::WaitForPendingFinalizers() } }

Nyní již stačí volat funkci:

ConvertTo-XLSX -Path 'CESTA_K_XLS' -Visible -ToFolder 'CESTA_KAM_DAT_XLSX'

Parametrem Visible můžeš říci, zdali chceš, aby problikávalo spuštění excelu, nebo se vše dělo na pozadí...


Ostatní duben 2018