Попытка создать объединенный файл xls на основе двух отдельных отчетов, объединенных вместе. - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь объединить два отчета с одинаковыми заголовками, но разными заголовками для каждого отчета в один отчет, объединенный вместе.Вот мой сценарий для первого отчета

$items = Import-Csv "C:\OSMOR Pipeline\u_dbview_fsc.csv" |
         Sort-Object 'cr_start_date' |
         Where-Object { $_.cr_u_port_driver -in @('CCT-Retail Operations Technology', 'CCT-Retail Operations & Intria', 'CCT-Enterprise Operations Technology (EOT)') }
$items_formatted = $items | Select-Object -Property `
    @{ Name = 'Change request'; Expression = 'ct_change_request' },
    @{ Name = 'Change Title'; Expression = 'cr_short_description' },
    @{ Name = 'Technology Portfolio Driver'; Expression = 'cr_u_port_driver' },
    @{ Name = 'Planned Start Date'; Expression = 'cr_start_date' }, 
    @{ Name = 'Planned End Date'; Expression = 'cr_end_date' }, 
    @{ Name = 'Phase'; Expression = 'cr_phase' },
    @{ Name = 'Change Type'; Expression = 'cr_type' },
    @{ Name = 'Opened By'; Expression = 'cr_opened_by' },
    @{ Name = 'Task Description'; Expression = 'ct_description' },
    @{ Name = 'Task Number'; Expression = 'ct_number' },
    @{ Name = 'Assigned To'; Expression = 'ct_assigned_to' },
    @{ Name = 'Assignment Group'; Expression = 'cr_phase' },
    @{ Name = 'Technology Portfolio Impacted'; Expression = 'tpi_u_technology_portfolio' }
$items_formatted |
    Export-Excel -Path 'C:\Temp\Excel.xls' -Title "Changes Driven by CCT-GOT" -TitleBold

Впоследствии я создал второй отчет, и вот мой сценарий для него.

$items2 = Import-Csv "C:\OSMOR Pipeline\u_dbview_fsc.csv" |
          Sort-Object 'cr_start_date' |
          Where-Object { $_.tpi_u_technology_portfolio -in @('CCT-Retail Operations Technology', 'CCT-Retail Operations & Intria', 'CCT-Enterprise Operations Technology (EOT)') }
$items_formatted2 = $items2 | Select-Object -Property `
    @{ Name = 'Change request'; Expression = 'ct_change_request' },
    @{ Name = 'Change Title'; Expression = 'cr_short_description' },
    @{ Name = 'Technology Portfolio Driver'; Expression = 'cr_u_port_driver' },
    @{ Name = 'Planned Start Date'; Expression = 'cr_start_date' }, 
    @{ Name = 'Planned End Date'; Expression = 'cr_end_date' }, 
    @{ Name = 'Phase'; Expression = 'cr_phase' },
    @{ Name = 'Change Type'; Expression = 'cr_type' },
    @{ Name = 'Opened By'; Expression = 'cr_opened_by' },
    @{ Name = 'Task Description'; Expression = 'ct_description' },
    @{ Name = 'Task Number'; Expression = 'ct_number' },
    @{ Name = 'Assigned To'; Expression = 'ct_assigned_to' },
    @{ Name = 'Assignment Group'; Expression = 'cr_phase' },
    @{ Name = 'Technology Portfolio Impacted'; Expression = 'tpi_u_technology_portfolio' }

$items_formatted2 |
      Export-Excel -Path 'C:\Temp\Excel2.xls' -Title "Changes Impacted by CCT-GOT" -TitleBold

Но когда я попытался объединить содержимое,объединенный отчет выводит только заголовки, а не остальное содержимое.

$merged_reports = @()

foreach ($report in (Get-ChildItem "C:\Temp\Excel*.xls")) {
    $report_content = foreach ($row in $report) {
        [PSCustomObject]@{
            'Change request' = $row.'Change request'
            'Change Title' = $row.'Change Title'
            'Technology Portfolio Driver' = $row.'Technology Portfolio Driver'
            'Planned Start Date' = $row.'Planned Start Date'
            'Planned End Date'= $row.'Planned End Date'  
            'Phase'= $row.'Phase'
            'Change Type' = $row.'Change Type'
            'Opened By' = $row.'Opened By'
            'Task Description' = $row.'Task Description'
            'Task Number' = $row.'Task Number' 
            'Assigned To' = $row.'Assigned To'
            'Assignment Group' = $row.'Assignment Group' 
            'Technology Portfolio Impacted' = $row.'Technology Portfolio Impacted'
        }
    }

    $merged_reports += @($report_content)
}
$merged_reports | Export-Excel ".\merged_report.xls"

Отчет должен выглядеть примерно так:

enter image description here

1 Ответ

0 голосов
/ 20 сентября 2019

Расчетное свойство

@{Name='Change request'; Expression='ct_change_request'}

создает свойство с именем «Запрос на изменение» и значением «ct_change_request».Если вы хотите переименовать свойства с помощью вычисляемых свойств, вам нужно поместить значение исходного свойства в выражение:

@{Name='Change request'; Expression={$_.ct_change_request}}

Кроме того, поскольку оба CSV, кажется, имеют одинаковые столбцы, и единственное различие в их обработкепохоже, что записи фильтруются, вы можете упростить код до чего-то вроде этого:

$items1 = Import-Csv "C:\OSMOR Pipeline\u_dbview_fsc.csv" |
          Where-Object { $_.cr_u_port_driver -in @(...) }
$items2 = Import-Csv "C:\OSMOR Pipeline\u_dbview_fsc.csv" |
          Where-Object { $_.tpi_u_technology_portfolio -in @(...) }

$items1 + $items2 |
    Sort-Object 'cr_start_date' |
    Select-Object @{n='Change request';e={$_.ct_change_request}},
        @{n='Change Title';e={$_.cr_short_description}},
        @{n='Technology Portfolio Driver';e={$_.cr_u_port_driver}},
        ...
        ... |
    Export-Excel -Path 'C:\Temp\Excel.xlsx' -Title "Changes Driven by CCT-GOT" -TitleBold

Для разных заголовков вы можете экспортировать оба CSV-файла как отдельные листы:

$title1 = 'Changes Driven by CCT-GOT'
$items1 |
    Sort-Object 'cr_start_date' |
    Select-Object @{n='Change request';e={$_.ct_change_request}},
        @{n='Change Title';e={$_.cr_short_description}},
        @{n='Technology Portfolio Driver';e={$_.cr_u_port_driver}},
        ...
        ... |
    Export-Excel -Path 'C:\Temp\Excel.xlsx' -Title $title1 -TitleBold -WorksheetName $title1

$title2 = 'Changes Impacted by CCT-GOT'
$items2 |
    Sort-Object 'cr_start_date' |
    Select-Object @{n='Change request';e={$_.ct_change_request}},
        @{n='Change Title';e={$_.cr_short_description}},
        @{n='Technology Portfolio Driver';e={$_.cr_u_port_driver}},
        ...
        ... |
    Export-Excel -Path 'C:\Temp\Excel.xlsx' -Title $title2 -TitleBold -WorksheetName $title2

Я не знаю, что модуль ImportExcel может экспортировать оба входных файла на одной странице с отдельными отформатированными заголовками.Для этого вам может понадобиться Excel.

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