Public/ReleaseNotes/ExportExcel/Export-ExcelWorkItems.ps1
function Export-ExcelWorkItems { <# .SYNOPSIS Exports work items to an Excel worksheet. .PARAMETER ExportData Export data prepared by ConvertTo-ExportData. .PARAMETER ExcelPackage Package to add the worksheet to. .PARAMETER Styles Style properties for different cell types. .PARAMETER WorksheetName Name of the worksheet to create. .PARAMETER Filter Scriptblock filter for $ExportData.WorkItems to be included on this worksheet. .PARAMETER IncludeProperties List of patterns for properties to include. .PARAMETER ExcludeProperties List of patterns for properties to exclude. #> [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute( 'PSUseSingularNouns', '', Justification = '' )] [CmdletBinding()] param( [PSTypeName('PSTypeNames.AzureDevOpsApi.ExportData')] [Parameter(Mandatory, Position = 1)] [Alias('Data')] $ExportData, [Alias('WorkBook', 'Excel', 'Package')] $ExcelPackage, $Styles, $WorksheetName = 'WorkItems', [scriptblock] $Filter = { $true }, $IncludeProperties = @( '*' ), $ExcludeProperties = @( ) ) process { # add new sheet to hold the data $worksheet = ImportExcel\Add-Worksheet ` -ExcelPackage $excelPackage ` -WorksheetName $WorksheetName # list of known properties $KnownProperties = @( 'WorkItemId' 'InclusionReason' 'TestedWorkItemStates' 'WorkItemType' 'Title' 'State' 'Reason' 'AreaPath' 'IterationPath' 'CatalogueRequestNumber' 'ExternalIdentificationNumber' 'AssignedToDisplayName' 'AssignedToUniqueName' 'Discipline' 'ResolvedDate' 'ResolvedByDisplayName' 'ResolvedByUniqueName' 'ResolvedReason' 'ClosedDate' 'ClosedByDisplayName' 'ClosedByUniqueName' 'RequiresTest' 'OriginalEstimate' 'CompletedWork' 'RemainingWork' 'TargetDate' 'Tags' 'Parent' ) # list of properties we want to export $properties = $KnownProperties ` | Limit-String ` -Include $IncludeProperties ` -Exclude $ExcludeProperties # set header Export-ExcelSetHeader ` -Worksheet $worksheet ` -HeaderRowStyle $Styles.Header ` -Columns $properties # write out the data $row = 1 foreach ($item in $ExportData.WorkItems | Where-Object $Filter | Sort-Object -Property WorkItemId) { $column = 0 $row++ # WorkItemId if ($properties -icontains 'WorkItemId') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.WorkItemId $worksheet.Cells[$address].Hyperlink = $item.PortalUrl ImportExcel\Set-ExcelRange -Worksheet $worksheet -Range $address ` -Underline:$Styles.Link.Underline ` -HorizontalAlignment $Styles.Link.HorizontalAlignment } # InclusionReason if ($properties -icontains 'InclusionReason') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.InclusionReason } # TestedWorkItemStates if ($properties -icontains 'TestedWorkItemStates') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.TestedWorkItemStates } # WorkItemType if ($properties -icontains 'WorkItemType') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.WorkItemType } # Title if ($properties -icontains 'Title') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.Title } # State if ($properties -icontains 'State') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.State } # Reason if ($properties -icontains 'Reason') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.Reason } # AreaPath if ($properties -icontains 'AreaPath') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.AreaPath } # IterationPath if ($properties -icontains 'IterationPath') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.IterationPath } # CatalogueRequestNumber if ($properties -icontains 'CatalogueRequestNumber') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.CatalogueRequestNumber } # ExternalIdentificationNumber if ($properties -icontains 'ExternalIdentificationNumber') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.ExternalIdentificationNumber } # AssignedToDisplayName if ($properties -icontains 'AssignedToDisplayName') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.AssignedToDisplayName } # AssignedToUniqueName if ($properties -icontains 'AssignedToUniqueName') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.AssignedToUniqueName } # Discipline if ($properties -icontains 'Discipline') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.Discipline } # ResolvedDate if ($properties -icontains 'ResolvedDate') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = ConvertTo-TimeZoneDateTime ` -DateTime $item.ResolvedDate ` -TimeZone $Styles.DateTime.TargetTimeZone ImportExcel\Set-ExcelRange -Worksheet $worksheet -Range $address ` -NumberFormat $Styles.DateTime.Format ` -HorizontalAlignment $Styles.DateTime.HorizontalAlignment } # ResolvedByDisplayName if ($properties -icontains 'ResolvedByDisplayName') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.ResolvedByDisplayName } # ResolvedByUniqueName if ($properties -icontains 'ResolvedByUniqueName') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.ResolvedByUniqueName } # ResolvedReason if ($properties -icontains 'ResolvedReason') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.ResolvedReason } # ClosedDate if ($properties -icontains 'ClosedDate') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = ConvertTo-TimeZoneDateTime ` -DateTime $item.ClosedDate ` -TimeZone $Styles.DateTime.TargetTimeZone ImportExcel\Set-ExcelRange -Worksheet $worksheet -Range $address ` -NumberFormat $Styles.DateTime.Format ` -HorizontalAlignment $Styles.DateTime.HorizontalAlignment } # ClosedByDisplayName if ($properties -icontains 'ClosedByDisplayName') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.ClosedByDisplayName } # ClosedByUniqueName if ($properties -icontains 'ClosedByUniqueName') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.ClosedByUniqueName } # RequiresTest if ($properties -icontains 'RequiresTest') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.RequiresTest } # OriginalEstimate if ($properties -icontains 'OriginalEstimate') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.OriginalEstimate } # CompletedWork if ($properties -icontains 'CompletedWork') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.CompletedWork } # RemainingWork if ($properties -icontains 'RemainingWork') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.RemainingWork } # TargetDate if ($properties -icontains 'TargetDate') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = ConvertTo-TimeZoneDateTime ` -DateTime $item.TargetDate ` -TimeZone $Styles.Date.TargetTimeZone ImportExcel\Set-ExcelRange -Worksheet $worksheet -Range $address ` -NumberFormat $Styles.Date.Format ` -HorizontalAlignment $Styles.Date.HorizontalAlignment } # Tags if ($properties -icontains 'Tags') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.Tags } # Parent if ($properties -icontains 'Parent') { $column++ $address = Export-ExcelGetCellAddress -Row $row -Column $column $worksheet.Cells[$address].Value = $item.Parent $worksheet.Cells[$address].Hyperlink = $item.ParentPortalUrl ImportExcel\Set-ExcelRange -Worksheet $worksheet -Range $address ` -Underline:$styles.Link.Underline ` -HorizontalAlignment $styles.Link.HorizontalAlignment } } # format columns $address = Export-ExcelGetCellAddress -Column $column ImportExcel\Set-ExcelRange -Worksheet $worksheet -Range "A:$($address)" -AutoSize } } |