заполнение столбца значением по умолчанию для количества строк в файле - PullRequest
0 голосов
/ 29 октября 2019

Если приведенный ниже идентификатор кода хотел бы добавить значение по умолчанию, давайте назовем его X в столбце paycentre в окончательном выводе для каждой строки, содержащей информацию - может ли кто-нибудь указать мне правильное направление?

любая помощь с благодарностью.

$CompletedFile = "C:\Users\filepath.csv"
$path = "C:\Users\originalfile.xls"
$allstaff = @()

#define path for edited docments 
Set-Location -Path $path

#Open the Excel file for Whichever csv.  
$excelFile = Get-ChildItem -Filter "*file name*"
$excelFile = $path + $excelFile

$excel = new-object -com Excel.Application -Property @{Visible = $false} 
#Open the file
$workbook = $excel.Workbooks.Open($excelFile) 
#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($path + "OGEM.csv",6)
#Close workbook and save changes
$workbook.Close($true) 
#Quit Excel
$excel.quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null

Set-Location -Path $path


$ImportFileNoHeader = Get-ChildItem -Filter "*OGEM*" -Recurse
Clear-Content $CompletedFile

Add-Content $CompletedFile "Title,First Name,Surname,Number,DoB,Amount,EmployeeNo,Location,Paycentre"
#Fill with content from the source file, but miss the last total row

Get-Content $ImportFileNoHeader | Select-Object -SkipLast 2 |Add-Content $CompletedFile



1 Ответ

0 голосов
/ 29 октября 2019

Если я правильно понял вопрос, приведенный ниже код должен делать то, что вы хотите.

Прежде всего, однако, вы должны использовать командлет 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 использует в вашей системе

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...