From 07f15f417f6fc4d61878754e5845c351b96b7df1 Mon Sep 17 00:00:00 2001 From: jhoneill Date: Fri, 27 Jul 2018 22:25:00 +0100 Subject: [PATCH] Help updates; formatting.ps1 duplicates other file contents, removed it. --- AddConditionalFormatting.ps1 | 7 ++ Set-Column.ps1 | 56 ++++----- Set-Row.ps1 | 19 ++- SetFormat.ps1 | 18 +-- formatting.ps1 | 227 ----------------------------------- 5 files changed, 53 insertions(+), 274 deletions(-) delete mode 100644 formatting.ps1 diff --git a/AddConditionalFormatting.ps1 b/AddConditionalFormatting.ps1 index 5757fe5..99754f2 100644 --- a/AddConditionalFormatting.ps1 +++ b/AddConditionalFormatting.ps1 @@ -15,7 +15,14 @@ The desired worksheet is selected and the then columns B and i are conditially formatted (excluding the top row) to show red text if the columns contain "2003" or "Disabled respectively. A fixed date formats are then applied to columns D..G, and the top row is formatted. Finally the workbook is saved and the Excel object closed. + .Example + C:\> $r = Add-ConditionalFormatting -WorkSheet $excel.Workbook.Worksheets[1] -Range "B1:B100" -ThreeIconsSet Flags -Passthru + C:\> $r.Reverse = $true ; $r.Icon1.Type = "Num"; $r.Icon2.Type = "Num" ; $r.Icon2.value = 100 ; $r.Icon3.type = "Num" ;$r.Icon3.value = 1000 + Again Export excel has been called with -passthru leaving a package object in $Excel + This time B1:B100 has been conditionally formatted with 3 icons, using the flags icon set. + Add-ConditionalFormatting does not provide access to every option in the formatting rule, so passthru has been used and the + rule is to apply the flags in reverse order, and boundaries for the number which will set the split are set to 100 and 1000 #> Param ( #The worksheet where the format is to be applied diff --git a/Set-Column.ps1 b/Set-Column.ps1 index faed0d4..a77dcd6 100644 --- a/Set-Column.ps1 +++ b/Set-Column.ps1 @@ -40,34 +40,34 @@ [OfficeOpenXml.Style.ExcelBorderStyle]$BorderAround, #Colour for the text - if none specified it will be left as it it is [System.Drawing.Color]$FontColor, - #Make text bold - [switch]$Bold, - #Make text italic - [switch]$Italic, - #Underline the text using the underline style in -underline type - [switch]$Underline, - #Should Underline use single or double, normal or accounting mode : default is single normal - [OfficeOpenXml.Style.ExcelUnderLineType]$UnderLineType = [OfficeOpenXml.Style.ExcelUnderLineType]::Single, - #StrikeThrough text - [switch]$StrikeThru, - #Subscript or superscript - [OfficeOpenXml.Style.ExcelVerticalAlignmentFont]$FontShift, - #Font to use - Excel defaults to Calibri - [String]$FontName, - #Point size for the text - [float]$FontSize, - #Change background colour - [System.Drawing.Color]$BackgroundColor, - #Background pattern - solid by default - [OfficeOpenXml.Style.ExcelFillStyle]$BackgroundPattern = [OfficeOpenXml.Style.ExcelFillStyle]::Solid , - #Secondary colour for background pattern - [Alias("PatternColour")] - [System.Drawing.Color]$PatternColor, - #Turn on text wrapping - [switch]$WrapText, - #Position cell contents to left, right or centre ... - [OfficeOpenXml.Style.ExcelHorizontalAlignment]$HorizontalAlignment, - #Position cell contents to top bottom or centre + #Make text bold; use -Bold:$false to remove bold + [switch]$Bold, + #Make text italic; use -Italic:$false to remove italic + [switch]$Italic, + #Underline the text using the underline style in -underline type; use -Underline:$false to remove underlining + [switch]$Underline, + #Should Underline use single or double, normal or accounting mode : default is single normal + [OfficeOpenXml.Style.ExcelUnderLineType]$UnderLineType = [OfficeOpenXml.Style.ExcelUnderLineType]::Single, + #Strike through text; use -Strikethru:$false to remove Strike through + [switch]$StrikeThru, + #Subscript or superscript (or none) + [OfficeOpenXml.Style.ExcelVerticalAlignmentFont]$FontShift, + #Font to use - Excel defaults to Calibri + [String]$FontName, + #Point size for the text + [float]$FontSize, + #Change background colour + [System.Drawing.Color]$BackgroundColor, + #Background pattern - solid by default + [OfficeOpenXml.Style.ExcelFillStyle]$BackgroundPattern = [OfficeOpenXml.Style.ExcelFillStyle]::Solid , + #Secondary colour for background pattern + [Alias("PatternColour")] + [System.Drawing.Color]$PatternColor, + #Turn on text wrapping; use -WrapText:$false to turn off word wrapping + [switch]$WrapText, + #Position cell contents to left, right, center etc. default is 'General' + [OfficeOpenXml.Style.ExcelHorizontalAlignment]$HorizontalAlignment, + #Position cell contents to top bottom or centre [OfficeOpenXml.Style.ExcelVerticalAlignment]$VerticalAlignment, #Degrees to rotate text. Up to +90 for anti-clockwise ("upwards"), or to -90 for clockwise. [ValidateRange(-90, 90)] diff --git a/Set-Row.ps1 b/Set-Row.ps1 index 204e6ce..c96ce14 100644 --- a/Set-Row.ps1 +++ b/Set-Row.ps1 @@ -1,7 +1,7 @@ Function Set-Row { <# .Synopsis - Fills values into a row in a Excel spreadsheet + Fills values into a [new] row in an Excel spreadsheet. To format a row without setting values, use Set-Format. .Description Set-Row accepts either a Worksheet object or an Excel package object returned by Export-Excel and the name of a sheet, and inserts the chosen contents into a row of the sheet. @@ -37,26 +37,25 @@ $Value, #Optional Row heading $Heading , - #Number format to apply to cells e.g. "dd/MM/yyyy HH:mm", "£#,##0.00;[Red]-£#,##0.00", "0.00%" , "##/##" , "0.0E+0" etc + #Number format to apply to cells e.g. "dd/MM/yyyy HH:mm", "£#,##0.00;[Red]-£#,##0.00", "0.00%" , "##/##" , "0.0E+0" etc [Alias("NFormat")] $NumberFormat, #Style of border to draw around the row [OfficeOpenXml.Style.ExcelBorderStyle]$BorderAround, #Colour for the text - if none specified it will be left as it it is [System.Drawing.Color]$FontColor, - #Make text bold + #Make text bold; use -Bold:$false to remove bold [switch]$Bold, - #Make text italic + #Make text italic; use -Italic:$false to remove italic [switch]$Italic, - #Underline the text using the underline style in -underline type + #Underline the text using the underline style in -underline type; use -Underline:$false to remove underlining [switch]$Underline, #Should Underline use single or double, normal or accounting mode : default is single normal [OfficeOpenXml.Style.ExcelUnderLineType]$UnderLineType = [OfficeOpenXml.Style.ExcelUnderLineType]::Single, - #StrikeThrough text + #Strike through text; use -Strikethru:$false to remove Strike through [switch]$StrikeThru, - #Subscript or superscript + #Subscript or superscript (or none) [OfficeOpenXml.Style.ExcelVerticalAlignmentFont]$FontShift, - #Font to use - Excel defaults to Calibri [String]$FontName, #Point size for the text [float]$FontSize, @@ -67,9 +66,9 @@ #Secondary colour for background pattern [Alias("PatternColour")] [System.Drawing.Color]$PatternColor, - #Turn on text wrapping + #Turn on text wrapping; use -WrapText:$false to turn off word wrapping [switch]$WrapText, - #Position cell contents to left, right or centre ... + #Position cell contents to left, right, center etc. default is 'General' [OfficeOpenXml.Style.ExcelHorizontalAlignment]$HorizontalAlignment, #Position cell contents to top bottom or centre [OfficeOpenXml.Style.ExcelVerticalAlignment]$VerticalAlignment, diff --git a/SetFormat.ps1 b/SetFormat.ps1 index e77e433..5899f7b 100644 --- a/SetFormat.ps1 +++ b/SetFormat.ps1 @@ -38,17 +38,17 @@ $Formula, #Clear Bold, Italic, StrikeThrough and Underline and set colour to black [switch]$ResetFont, - #Make text bold + #Make text bold; use -Bold:$false to remove bold [switch]$Bold, - #Make text italic + #Make text italic; use -Italic:$false to remove italic [switch]$Italic, - #Underline the text using the underline style in -underline type + #Underline the text using the underline style in -underline type; use -Underline:$false to remove underlining [switch]$Underline, #Should Underline use single or double, normal or accounting mode : default is single normal [OfficeOpenXml.Style.ExcelUnderLineType]$UnderLineType = [OfficeOpenXml.Style.ExcelUnderLineType]::Single, - #StrikeThrough text + #Strike through text; use -Strikethru:$false to remove Strike through [switch]$StrikeThru, - #Subscript or superscript + #Subscript or superscript (or none) [OfficeOpenXml.Style.ExcelVerticalAlignmentFont]$FontShift, #Font to use - Excel defaults to Calibri [String]$FontName, @@ -61,11 +61,11 @@ #Secondary colour for background pattern [Alias("PatternColour")] [System.Drawing.Color]$PatternColor, - #Turn on text wrapping + #Turn on text wrapping; use -WrapText:$false to turn off word wrapping [switch]$WrapText, - #Position cell contents to left, right or centre ... + #Position cell contents to left, right, center etc. default is 'General' [OfficeOpenXml.Style.ExcelHorizontalAlignment]$HorizontalAlignment, - #Position cell contents to top bottom or centre + #Position cell contents to top bottom or center [OfficeOpenXml.Style.ExcelVerticalAlignment]$VerticalAlignment, #Degrees to rotate text. Up to +90 for anti-clockwise ("upwards"), or to -90 for clockwise. [ValidateRange(-90, 90)] @@ -77,7 +77,7 @@ [float]$Width, #Set cells to a fixed hieght (rows or ranges only) [float]$Height, - #Hide a row or column (not a range) + #Hide a row or column (not a range); use -Hidden:$false to unhide [switch]$Hidden ) begin { diff --git a/formatting.ps1 b/formatting.ps1 deleted file mode 100644 index f54c27c..0000000 --- a/formatting.ps1 +++ /dev/null @@ -1,227 +0,0 @@ -Function Add-ConditionalFormatting { - <# - .Synopsis - Adds contitional formatting to worksheet - .Example - $excel = $avdata | Export-Excel -Path (Join-path $FilePath "\Machines.XLSX" ) -WorksheetName "Server Anti-Virus" -AutoSize -FreezeTopRow -AutoFilter -PassThru - - Add-ConditionalFormatting -WorkSheet $excel.Workbook.Worksheets[1] -Address "b":b1048576" -ForeGroundColor "RED" -RuleType ContainsText -ConditionValue "2003" - Add-ConditionalFormatting -WorkSheet $excel.Workbook.Worksheets[1] -Address "i2:i1048576" -ForeGroundColor "RED" -RuleType ContainsText -ConditionValue "Disabled" - $excel.Workbook.Worksheets[1].Cells["D1:G1048576"].Style.Numberformat.Format = [cultureinfo]::CurrentCulture.DateTimeFormat.ShortDatePattern - $excel.Workbook.Worksheets[1].Row(1).style.font.bold = $true - $excel.Save() ; $excel.Dispose() - - Here Export-Excel is called with the -passThru parameter so the Excel Package object is stored in $Excel - The desired worksheet is selected and the then columns B and i are conditially formatted (excluding the top row) to show - Fixed formats are then applied to dates in columns D..G and the top row is formatted - Finally the workbook is saved and the Excel closed. - - #> - Param ( - #The worksheet where the format is to be applied - [OfficeOpenXml.ExcelWorksheet]$WorkSheet , - #The area of the worksheet where the format is to be applied - [OfficeOpenXml.ExcelAddress]$Range , - #One of the standard named rules - Top / Bottom / Less than / Greater than / Contains etc - [Parameter(Mandatory=$true,ParameterSetName="NamedRule",Position=3)] - [OfficeOpenXml.ConditionalFormatting.eExcelConditionalFormattingRuleType]$RuleType , - #Text colour for matching objects - [Alias("ForeGroundColour")] - [System.Drawing.Color]$ForeGroundColor, - #colour for databar type charts - [Parameter(Mandatory=$true,ParameterSetName="DataBar")] - [Alias("DataBarColour")] - [System.Drawing.Color]$DataBarColor, - #One of the three-icon set types (e.g. Traffic Lights) - [Parameter(Mandatory=$true,ParameterSetName="ThreeIconSet")] - [OfficeOpenXml.ConditionalFormatting.eExcelconditionalFormatting3IconsSetType]$ThreeIconsSet, - #A four-icon set name - [Parameter(Mandatory=$true,ParameterSetName="FourIconSet")] - [OfficeOpenXml.ConditionalFormatting.eExcelconditionalFormatting4IconsSetType]$FourIconsSet, - #A five-icon set name - [Parameter(Mandatory=$true,ParameterSetName="FiveIconSet")] - [OfficeOpenXml.ConditionalFormatting.eExcelconditionalFormatting5IconsSetType]$FiveIconsSet, - #A value for the condition (e.g. "2000" if the test is 'lessthan 2000') - [string]$ConditionValue, - #A second value for the conditions like between x and Y - [string]$ConditionValue2, - #Background colour for matching items - [System.Drawing.Color]$BackgroundColor, - #Background pattern for matching items - [OfficeOpenXml.Style.ExcelFillStyle]$BackgroundPattern = [OfficeOpenXml.Style.ExcelFillStyle]::Solid, - #Secondary colour when a background pattern requires it - [System.Drawing.Color]$PatternColor, - #Sets the numeric format for matching items - $NumberFormat, - #Put matching items in bold face - [switch]$Bold, - #Put matching items in italic - [switch]$Italic, - #Underline matching items - [switch]$Underline, - #Strikethrough text of matching items - [switch]$StrikeThru - ) - - If ($ThreeIconsSet) {$rule = $WorkSheet.ConditionalFormatting.AddThreeIconSet($Range , $ThreeIconsSet)} - elseif ($FourIconsSet) {$rule = $WorkSheet.ConditionalFormatting.AddFourIconSet( $Range , $FourIconsSet) } - elseif ($FiveIconsSet) {$rule = $WorkSheet.ConditionalFormatting.AddFiveIconSet( $Range , $IconType) } - elseif ($DataBarColor) {$rule = $WorkSheet.ConditionalFormatting.AddDatabar( $Range , $DataBarColor) } - else { $rule = ($WorkSheet.ConditionalFormatting)."Add$RuleType"($Range)} - - if ($ConditionValue -and $RuleType -match "Top|Botom") {$rule.Rank = $ConditionValue } - if ($ConditionValue -and $RuleType -match "StdDev") {$rule.StdDev = $ConditionValue } - if ($ConditionValue -and $RuleType -match "Than|Equal|Expression") {$rule.Formula = $ConditionValue } - if ($ConditionValue -and $RuleType -match "Text|With") {$rule.Text = $ConditionValue } - if ($ConditionValue -and - $ConditionValue2 -and $RuleType -match "Between") {$rule.Formula = $ConditionValue - $rule.Formula2 = $ConditionValue2} - - if ($NumberFormat) {$rule.Style.NumberFormat.Format = $NumberFormat } - if ($Underline) {$rule.Style.Font.Underline = [OfficeOpenXml.Style.ExcelUnderLineType]::Single } - if ($Bold) {$rule.Style.Font.Bold = $true} - if ($Italic) {$rule.Style.Font.Italic = $true} - if ($StrikeThru) {$rule.Style.Font.Strike = $true} - if ($ForeGroundColor) {$rule.Style.Font.Color.color = $ForeGroundColor } - if ($BackgroundColor) {$rule.Style.Fill.BackgroundColor.color = $BackgroundColor } - if ($BackgroundPattern) {$rule.Style.Fill.PatternType = $BackgroundPattern } - if ($PatternColor) {$rule.Style.Fill.PatternColor.color = $PatternColor } -} - -Function Set-Format { - <# - .SYNOPSIS - Applies Number, font, alignment and colour formatting to a range of Excel Cells - .EXAMPLE - $sheet.Column(3) | Set-Format -HorizontalAlignment Right -NumberFormat "#,###" - Selects column 3 from a sheet object (within a workbook object, which is a child of the ExcelPackage object) and passes it to Set-Format which formats as an integer with comma seperated groups - .EXAMPLE - Set-Format -Address $sheet.Cells["E1:H1048576"] -HorizontalAlignment Right -NumberFormat "#,###" - Instead of piping the address in this version specifies a block of cells and applies similar formatting - - #> - Param ( - #One or more row(s), Column(s) and/or block(s) of cells to format - [Parameter(ValueFromPipeline=$true)] - [object[]]$Address , - #Number format to apply to cells e.g. "dd/MM/yyyy HH:mm", "£#,##0.00;[Red]-£#,##0.00", "0.00%" , "##/##" , "0.0E+0" etc - [Alias("NFormat")] - $NumberFormat, - #Style of border to draw around the range - [OfficeOpenXml.Style.ExcelBorderStyle]$BorderAround, - #Colour for the text - if none specified it will be left as it it is - [System.Drawing.Color]$FontColor, - #Clear Bold, Italic, StrikeThrough and Underline and set colour to black - [switch]$ResetFont, - #Make text bold - [switch]$Bold, - #Make text italic - [switch]$Italic, - #Underline the text using the underline style in -underline type - [switch]$Underline, - #Should Underline use single or double, normal or accounting mode : default is single normal - [OfficeOpenXml.Style.ExcelUnderLineType]$UnderLineType = [OfficeOpenXml.Style.ExcelUnderLineType]::Single, - #StrikeThrough text - [switch]$StrikeThru, - #Subscript or superscript - [OfficeOpenXml.Style.ExcelVerticalAlignmentFont]$FontShift, - #Font to use - Excel defaults to Calibri - [String]$FontName, - #Point size for the text - [float]$FontSize, - #Change background colour - [System.Drawing.Color]$BackgroundColor, - #Background pattern - solid by default - [OfficeOpenXml.Style.ExcelFillStyle]$BackgroundPattern =[OfficeOpenXml.Style.ExcelFillStyle]::Solid , - #Secondary colour for background pattern - [Alias("PatternColour")] - [System.Drawing.Color]$PatternColor, - #Turn on text wrapping - [switch]$WrapText, - #Position cell contents to left, right or centre ... - [OfficeOpenXml.Style.ExcelHorizontalAlignment]$HorizontalAlignment, - #Position cell contents to top bottom or centre - [OfficeOpenXml.Style.ExcelVerticalAlignment]$VerticalAlignment, - #Degrees to rotate text. Up to +90 for anti-clockwise ("upwards"), or to -90 for clockwise. - [ValidateRange(-90,90)] - [int]$TextRotation , - #Autofit cells to width (columns or ranges only) - [switch]$AutoFit, - #Set cells to a fixed width (columns or ranges only), ignored if Autofit is specified - [float]$Width, - #Set cells to a fixed hieght (rows or ranges only) - [float]$Height, - #Hide a row or column (not a range) - [switch]$Hidden - ) - process { - Foreach ($range in $Address) { - if ($ResetFont) {$Range.Style.Font.Color.SetColor("Black") - $Range.Style.Font.Bold = $false - $Range.Style.Font.Italic = $false - $Range.Style.Font.UnderLine = $false - $Range.Style.Font.Strike = $false - } - if ($Underline) {$Range.Style.Font.UnderLine = $true - $Range.Style.Font.UnderLineType =$UnderLineType - } - if ($Bold) {$Range.Style.Font.Bold = $true } - if ($Italic) {$Range.Style.Font.Italic = $true } - if ($StrikeThru) {$Range.Style.Font.Strike = $true } - if ($FontShift) {$Range.Style.Font.VerticalAlign = $FontShift } - if ($FontColor) {$Range.Style.Font.Color.SetColor( $FontColor ) } - if ($BorderAround) {$Range.Style.Border.BorderAround( $BorderAround ) } - if ($NumberFormat) {$Range.Style.Numberformat.Format= $NumberFormat } - if ($TextRotation) {$Range.Style.TextRotation = $TextRotation } - if ($WrapText) {$Range.Style.WrapText = $true } - if ($HorizontalAlignment) {$Range.Style.HorizontalAlignment= $HorizontalAlignment } - if ($VerticalAlignment) {$Range.Style.VerticalAlignment = $VerticalAlignment } - - if ($BackgroundColor) { - $Range.Style.Fill.PatternType = $BackgroundPattern - $Range.Style.Fill.BackgroundColor.SetColor($BackgroundColor) - if ($PatternColor) { - $range.Style.Fill.PatternColor.SetColor( $PatternColor) - } - } - - if ($Height) { - if ($Range -is [OfficeOpenXml.ExcelRow] ) {$Range.Height = $Height } - elseif ($Range -is [OfficeOpenXml.ExcelRange] ) { - ($range.Start.Row)..($range.Start.Row + $range.Rows) | - ForEach-Object {$ws.Row($_).Height = $Height } - } - else {Write-Warning -Message ("Can set the height of a row or a range but not a {0} object" -f ($Range.GetType().name)) } - } - if ($AutoFit) { - if ($Range -is [OfficeOpenXml.ExcelColumn]) {$Range.AutoFit() } - elseif ($Range -is [OfficeOpenXml.ExcelRange] ) {$Range.AutoFitColumns() } - else {Write-Warning -Message ("Can autofit a column or a range but not a {0} object" -f ($Range.GetType().name)) } - - } - elseif ($Width) { - if ($Range -is [OfficeOpenXml.ExcelColumn]) {$Range.Width = $Width} - elseif ($Range -is [OfficeOpenXml.ExcelRange] ) { - ($range.Start.Column)..($range.Start.Column+ $range.Columns) | - ForEach-Object {$ws.Column($_).Width = $Width} - } - else {Write-Warning -Message ("Can set the width of a column or a range but not a {0} object" -f ($Range.GetType().name)) } - } - if ($Hidden) { - if ($Range -is [OfficeOpenXml.ExcelRow] -or - $Range -is [OfficeOpenXml.ExcelColumn] ) {$Range.Hidden = $True} - else {Write-Warning -Message ("Can hide a row or a column but not a {0} object" -f ($Range.GetType().name)) } - } - } - } -} - -#Argument completer for colours. If we have PS 5 or Tab expansion++ then we'll register it. Otherwise it does nothing. -Function ColorCompletion{ - param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) - [System.Drawing.KnownColor].GetFields() | Where-Object {$_.IsStatic -and $_.name -like "$wordToComplete*" } | - Sort-Object name | ForEach-Object {New-CompletionResult $_.name $_.name - } -} - - \ No newline at end of file