Я пытаюсь создать скрипт, который будет обнаруживать все файлы XLSX в C: \ Temp \ ConversionCSV \ и конвертировать их в CSV. Он прекрасно работает, когда в папке только один файл.
Однако, когда есть 2 файла, ForEach «объединяет» оба значения FullName в один, прежде чем пытаться преобразовать xlsx в csv (очевидно, именно так это и работает). ). Это приводит к сбою преобразования. Я также попробовал ForEach-Object.
Есть ли способ заставить скрипт запускаться на каждом элементе без предварительной группировки их? Или альтернатива? Могу ли я просто изменить расширение (это кажется неправильным)?
PS: я больше не могу найти источник оригинального скрипта, поэтому не могу отдать должное автору.
SCRIPT:
cls
Try {
$Directory = "C:\temp\ConversionCSV\"
$ExcelFiles = (Get-ChildItem $Directory | Where Extension -Like .XLS* `
| Select Name `
| Format-Table -HideTableHeaders `
| Out-String -ErrorAction Stop `
).trim()
#Files successfully detected:
#C:\temp\ConversionCSV\copy.xlsx
#C:\temp\ConversionCSV\FinancialSample.xlsx
Get-ChildItem $Repertoire | Select Name, Extension, `
BaseName, FullName, `
Directory, DirectoryName `
| Where Extension -eq .XLSX `
| Out-String
ForEach ($ExcelFile in $ExcelFiles)
{
$xlCSV = 6
$Excel = New-Object -comobject Excel.Application
$Excel.Visible = $False
$Excel.displayalerts = $False
##############################################################################
$FullName = $Directory+(Get-Variable -scope Local `
| Where Name -EQ 'ExcelFile' `
| Select Value `
| Format-table -HideTableHeaders -AutoSize -Wrap `
| Out-String -ErrorAction Stop).Trim()
Write-Host " `$FullName is $FullName"
##############################################################################
$CSVfilename = ($FullName -Replace "XLSX", "CSV").Trim()
##############################################################################
$Workbook = $Excel.Workbooks.Open($FullName)
$Workbook.SaveAs($CSVfilename,$xlCSV)
##############################################################################
$NewCSV= Get-ChildItem $Directory | Select Name, Extension, `
BaseName, FullName, `
Directory, DirectoryName `
| Where Extension -eq .CSV `
| Out-String -ErrorAction Stop
##############################################################################
#regionCloseExcel
$Excel.Quit()
If (Get-Process Excel)
{Write-Host "Closing Excel"
Stop-Process -Name Excel}
ElseIf (!(Get-Process Excel))
{Write-Host "`n Excel not runnning."}
Else {Write-Host "`n Unexpected event."}
#endregionCloseExcel
}
}
Catch {
Write-Host "`n---------------------ERROR--------------`n"
$_.Exception
}
Finally {Write-Host "`n----------------------END---------------"}