Если я правильно понял вопрос, приведенный ниже код должен делать то, что вы хотите.
Прежде всего, однако, вы должны использовать командлет Join-Path
для объединения путей вместо выполнения конкатенации строк, как в $path + $excelFile
чтобы избежать попадания путей между пропущенными символами обратной косой черты между частями.
Во-вторых, Get-ChildItem
возвращает массив объектов DirectoryInfo и / или FileInfo , а не простоимена файлов. Чтобы он возвращал только объекты FileInfo (не каталоги), используйте переключатель -File
.
$path = $env:USERPROFILE
$excelOut = Join-Path -Path $path -ChildPath 'OGEM.csv'
$completedFile = Join-Path -Path $path -ChildPath 'Completed-OGEM.csv'
$defaultValue = 'X'
$filter = '*.xlsx'
$excelFile = Get-ChildItem -Path $path -Filter $filter -File | Select-Object -First 1
if ($excelFile) {
$excel = New-Object -ComObject Excel.Application -Property @{Visible = $false}
# Open the file
$workbook = $excel.Workbooks.Open($excelFile.FullName)
# Activate the first worksheet
$sheet = $workbook.Sheets.Item(1)
[void]$sheet.Cells.Item(1, 1).EntireRow.Delete() # Delete the first row
[void]$sheet.Cells.Item(1, 1).EntireRow.Delete() # Delete the 2 row
[void]$sheet.Cells.Item(1, 1).EntireRow.Delete() # Delete the 3 row
[void]$sheet.Cells.Item(1, 1).EntireRow.Delete() # Delete the 4 row
[void]$sheet.Cells.Item(1, 1).EntireRow.Delete() # Delete the 5 row
$workbook.SaveAs($excelOut,6)
# Close workbook and save changes
$workbook.Close($true)
# Quit Excel
$excel.Quit()
# clean-up Com objects
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
$headers = 'Title','First Name','Surname','Number','DoB','Amount','EmployeeNo','Location'
# import the csv file and select all the above headers plus one that is created using a calculated property
$csv = Import-Csv -Path $excelOut -Header $headers -UseCulture | Select-Object *, @{Name = 'Paycentre'; Expression = {$defaultValue}}
Write-Host "Creating completed csv file '$completedFile'"
$csv | Export-Csv -Path $completedFile -UseCulture -Force -NoTypeInformation
}
else {
Write-Warning "Could not find a file using filter '$filter' in path '$path'"
}
Я использую переключатель -UseCulture
на Import-Csv и Export-Csv, чтобысоответствует символу-разделителю, который Excel использует в вашей системе
Надеюсь, это поможет