Better support of reverse in add-conditional formatting. Tidied Exampes

This commit is contained in:
jhoneill
2018-09-06 15:23:58 +01:00
parent 378a20a094
commit 53b63b3780
21 changed files with 78 additions and 70 deletions

View File

@@ -68,6 +68,8 @@
[Parameter(Mandatory = $true, ParameterSetName = "NamedRuleAddress", Position = 3)] [Parameter(Mandatory = $true, ParameterSetName = "NamedRuleAddress", Position = 3)]
[OfficeOpenXml.ConditionalFormatting.eExcelConditionalFormattingRuleType]$RuleType , [OfficeOpenXml.ConditionalFormatting.eExcelConditionalFormattingRuleType]$RuleType ,
#Text colour for matching objects #Text colour for matching objects
[Parameter(ParameterSetName = "NamedRule")]
[Parameter(ParameterSetName = "NamedRuleAddress")]
[Alias("ForeGroundColour")] [Alias("ForeGroundColour")]
[System.Drawing.Color]$ForeGroundColor, [System.Drawing.Color]$ForeGroundColor,
#colour for databar type charts #colour for databar type charts
@@ -87,7 +89,9 @@
[Parameter(Mandatory = $true, ParameterSetName = "FiveIconSet")] [Parameter(Mandatory = $true, ParameterSetName = "FiveIconSet")]
[Parameter(Mandatory = $true, ParameterSetName = "FiveIconSetAddress")] [Parameter(Mandatory = $true, ParameterSetName = "FiveIconSetAddress")]
[OfficeOpenXml.ConditionalFormatting.eExcelconditionalFormatting5IconsSetType]$FiveIconsSet, [OfficeOpenXml.ConditionalFormatting.eExcelconditionalFormatting5IconsSetType]$FiveIconsSet,
#Use the icon set in reverse order #Use the icon set in reverse order, or reverse the orders of Two- & Three-Color Scales
[Parameter(ParameterSetName = "NamedRule")]
[Parameter(ParameterSetName = "NamedRuleAddress")]
[Parameter(ParameterSetName = "ThreeIconSet")] [Parameter(ParameterSetName = "ThreeIconSet")]
[Parameter(ParameterSetName = "ThreeIconSetAddress")] [Parameter(ParameterSetName = "ThreeIconSetAddress")]
[Parameter(ParameterSetName = "FourIconSet")] [Parameter(ParameterSetName = "FourIconSet")]
@@ -155,13 +159,18 @@
} }
if ($Range -match "!") {$Range = $Range -replace '^.*!',''} if ($Range -match "!") {$Range = $Range -replace '^.*!',''}
#region Create a rule of the right type #region create a rule of the right type
if ($RuleType -match 'IconSet$') {Write-warning -Message "You cannot configure a IconSet rule in this way; please use -$RuleType <SetName>." ; return}
if ($PSBoundParameters.ContainsKey("ThreeIconsSet" ) ) {$rule = $WorkSheet.ConditionalFormatting.AddThreeIconSet($Range , $ThreeIconsSet)} if ($PSBoundParameters.ContainsKey("ThreeIconsSet" ) ) {$rule = $WorkSheet.ConditionalFormatting.AddThreeIconSet($Range , $ThreeIconsSet)}
elseif ($PSBoundParameters.ContainsKey("FourIconsSet" ) ) {$rule = $WorkSheet.ConditionalFormatting.AddFourIconSet( $Range , $FourIconsSet) } elseif ($PSBoundParameters.ContainsKey("FourIconsSet" ) ) {$rule = $WorkSheet.ConditionalFormatting.AddFourIconSet( $Range , $FourIconsSet )}
elseif ($PSBoundParameters.ContainsKey("FiveIconsSet" ) ) {$rule = $WorkSheet.ConditionalFormatting.AddFiveIconSet( $Range , $FiveIconsSet) } elseif ($PSBoundParameters.ContainsKey("FiveIconsSet" ) ) {$rule = $WorkSheet.ConditionalFormatting.AddFiveIconSet( $Range , $FiveIconsSet )}
elseif ($PSBoundParameters.ContainsKey("DataBarColor" ) ) {$rule = $WorkSheet.ConditionalFormatting.AddDatabar( $Range , $DataBarColor) } elseif ($PSBoundParameters.ContainsKey("DataBarColor" ) ) {$rule = $WorkSheet.ConditionalFormatting.AddDatabar( $Range , $DataBarColor )}
else {$rule = ($WorkSheet.ConditionalFormatting)."Add$RuleType"($Range)} else {$rule = ($WorkSheet.ConditionalFormatting)."Add$RuleType"($Range ) }
if ($PSBoundParameters.ContainsKey("Reverse" ) ) {$rule.reverse = [boolean]$Reverse} if ($Reverse) {
if ($rule.type -match 'IconSet$' ) {$rule.reverse = $true}
elseif ($rule.type -match 'ColorScale$') {$temp =$rule.LowValue.Color ; $rule.LowValue.Color = $rule.HighValue.Color; $rule.HighValue.Color = $temp}
else {Write-Warning -Message "-Reverse was ignored because $ruletype does not support it."}
}
#endregion #endregion
#region set the rule conditions #region set the rule conditions
#for lessThan/GreaterThan/Equal/Between conditions make sure that strings are wrapped in quotes. Formulas should be passed with = which will be stripped. #for lessThan/GreaterThan/Equal/Between conditions make sure that strings are wrapped in quotes. Formulas should be passed with = which will be stripped.
@@ -190,15 +199,15 @@
if ($RuleType -match "Text|With" -and $ConditionValue -match '^".*"$' ) { if ($RuleType -match "Text|With" -and $ConditionValue -match '^".*"$' ) {
Write-Warning -Message "The condition will look for the quotes at the start and end." Write-Warning -Message "The condition will look for the quotes at the start and end."
} }
if ($PSBoundParameters.ContainsKey("ConditionValue") -and if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
$RuleType -match "Top|Botom" ) {$rule.Rank = $ConditionValue } $RuleType -match "Top|Botom" ) {$rule.Rank = $ConditionValue }
if ($PSBoundParameters.ContainsKey("ConditionValue") -and if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
$RuleType -match "StdDev" ) {$rule.StdDev = $ConditionValue } $RuleType -match "StdDev" ) {$rule.StdDev = $ConditionValue }
if ($PSBoundParameters.ContainsKey("ConditionValue") -and if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
$RuleType -match "Than|Equal|Expression" ) {$rule.Formula = ($ConditionValue -replace '^=','') } $RuleType -match "Than|Equal|Expression" ) {$rule.Formula = ($ConditionValue -replace '^=','') }
if ($PSBoundParameters.ContainsKey("ConditionValue") -and if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
$RuleType -match "Text|With" ) {$rule.Text = ($ConditionValue -replace '^=','') } $RuleType -match "Text|With" ) {$rule.Text = ($ConditionValue -replace '^=','') }
if ($PSBoundParameters.ContainsKey("ConditionValue") -and if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
$PSBoundParameters.ContainsKey("ConditionValue2") -and $PSBoundParameters.ContainsKey("ConditionValue2") -and
$RuleType -match "Between" ) { $RuleType -match "Between" ) {
$rule.Formula = ($ConditionValue -replace '^=',''); $rule.Formula = ($ConditionValue -replace '^=','');
@@ -208,12 +217,12 @@
if ($PSBoundParameters.ContainsKey("Priority") ) {$rule.Priority = $Priority } if ($PSBoundParameters.ContainsKey("Priority") ) {$rule.Priority = $Priority }
#endregion #endregion
#region set the rule format #region set the rule format
if ($PSBoundParameters.ContainsKey("NumberFormat" ) ) {$rule.Style.NumberFormat.Format = (Expand-NumberFormat $NumberFormat) } if ($PSBoundParameters.ContainsKey("NumberFormat" ) ) {$rule.Style.NumberFormat.Format = (Expand-NumberFormat $NumberFormat) }
if ($Underline ) {$rule.Style.Font.Underline = [OfficeOpenXml.Style.ExcelUnderLineType]::Single } if ($Underline ) {$rule.Style.Font.Underline = [OfficeOpenXml.Style.ExcelUnderLineType]::Single }
elseif ($PSBoundParameters.ContainsKey("Underline" ) ) {$rule.Style.Font.Underline = [OfficeOpenXml.Style.ExcelUnderLineType]::None } elseif ($PSBoundParameters.ContainsKey("Underline" ) ) {$rule.Style.Font.Underline = [OfficeOpenXml.Style.ExcelUnderLineType]::None }
if ($PSBoundParameters.ContainsKey("Bold" ) ) {$rule.Style.Font.Bold = [boolean]$Bold } if ($PSBoundParameters.ContainsKey("Bold" ) ) {$rule.Style.Font.Bold = [boolean]$Bold }
if ($PSBoundParameters.ContainsKey("Italic" ) ) {$rule.Style.Font.Italic = [boolean]$Italic } if ($PSBoundParameters.ContainsKey("Italic" ) ) {$rule.Style.Font.Italic = [boolean]$Italic }
if ($PSBoundParameters.ContainsKey("StrikeThru") ) {$rule.Style.Font.Strike = [boolean]$StrikeThru } if ($PSBoundParameters.ContainsKey("StrikeThru" ) ) {$rule.Style.Font.Strike = [boolean]$StrikeThru }
if ($PSBoundParameters.ContainsKey("ForeGroundColor" ) ) {$rule.Style.Font.Color.color = $ForeGroundColor } if ($PSBoundParameters.ContainsKey("ForeGroundColor" ) ) {$rule.Style.Font.Color.color = $ForeGroundColor }
if ($PSBoundParameters.ContainsKey("BackgroundColor" ) ) {$rule.Style.Fill.BackgroundColor.color = $BackgroundColor } if ($PSBoundParameters.ContainsKey("BackgroundColor" ) ) {$rule.Style.Fill.BackgroundColor.color = $BackgroundColor }
if ($PSBoundParameters.ContainsKey("BackgroundPattern") ) {$rule.Style.Fill.PatternType = $BackgroundPattern } if ($PSBoundParameters.ContainsKey("BackgroundPattern") ) {$rule.Style.Fill.PatternType = $BackgroundPattern }

View File

@@ -1,6 +1,4 @@
cls try {ipmo ..\..\ImportExcel.psd1 -Force} catch {}
ipmo ..\..\ImportExcel.psd1 -Force
$data = $( $data = $(
New-PSItem 100 (echo test testx) New-PSItem 100 (echo test testx)
@@ -10,8 +8,8 @@ $data = $(
New-PSItem 500 New-PSItem 500
) )
$file1 = "tryComparison1.xlsx" $file1 = "$env:Temp\tryComparison1.xlsx"
$file2 = "tryComparison2.xlsx" $file2 = "$env:Temp\tryComparison2.xlsx"
rm $file1 -ErrorAction Ignore rm $file1 -ErrorAction Ignore
rm $file2 -ErrorAction Ignore rm $file2 -ErrorAction Ignore
@@ -22,6 +20,6 @@ $data | Export-Excel $file1 -Show -ConditionalText $(
) )
$data | Export-Excel $file2 -Show -ConditionalText $( $data | Export-Excel $file2 -Show -ConditionalText $(
New-ConditionalText -ConditionalType GreaterThanOrEqual 275 New-ConditionalText -ConditionalType GreaterThanOrEqual 275
New-ConditionalText -ConditionalType LessThanOrEqual 250 -BackgroundColor cyan New-ConditionalText -ConditionalType LessThanOrEqual 250 -BackgroundColor cyan
) )

Binary file not shown.

View File

@@ -40,4 +40,4 @@ $ptdef = New-PivotTableDefinition -PivotTableName "Summary" -PivotRows "Store" -
#Put in a title and freeze to top of the sheet including title and colmun headings #Put in a title and freeze to top of the sheet including title and colmun headings
#Add the Pivot table. #Add the Pivot table.
#Show the result #Show the result
Join-Worksheet -Path $path -WorkSheetName "Total" -Clearsheet -FromLabel "Store" -TableName "Summary" -TableStyle Light1 -AutoSize -BoldTopRow -FreezePane 2,1 -Title "Store Sales Summary" -TitleBold -TitleSize 14 -PivotTableDefinition $ptdef -show Join-Worksheet -Path $path -WorkSheetName "Total" -Clearsheet -FromLabel "Store" -TableName "Combined" -TableStyle Light1 -AutoSize -BoldTopRow -FreezePane 2,1 -Title "Store Sales Summary" -TitleBold -TitleSize 14 -PivotTableDefinition $ptdef -show

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -3,7 +3,7 @@ try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
#. ..\New-PSItem.ps1 #. ..\New-PSItem.ps1
Remove-Item *.xlsx Remove-Item "$env:temp\functions.xlsx" -ErrorAction SilentlyContinue
$( $(
New-PSItem 12001 Nails 37 3.99 =C2*D2 (echo ID Product Quantity Price Total) New-PSItem 12001 Nails 37 3.99 =C2*D2 (echo ID Product Quantity Price Total)
@@ -11,4 +11,4 @@ $(
New-PSItem 12003 Saw 12 15.37 =C4*D4 New-PSItem 12003 Saw 12 15.37 =C4*D4
New-PSItem 12010 Drill 20 8 =C5*D5 New-PSItem 12010 Drill 20 8 =C5*D5
New-PSItem 12011 Crowbar 7 23.48 =C6*D6 New-PSItem 12011 Crowbar 7 23.48 =C6*D6
) | Export-Excel functions.xlsx -AutoSize -Show ) | Export-Excel "$env:temp\functions.xlsx"-AutoSize -Show

View File

@@ -1,6 +1,6 @@
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {} try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
Remove-Item *.xlsx Remove-Item "$env:temp\functions.xlsx" -ErrorAction SilentlyContinue
$( $(
New-PSItem =2%/12 60 500000 "=pmt(rate,nper,pv)" (echo rate nper pv pmt) New-PSItem =2%/12 60 500000 "=pmt(rate,nper,pv)" (echo rate nper pv pmt)
@@ -9,4 +9,4 @@ $(
New-PSItem =5%/12 60 500000 "=pmt(rate,nper,pv)" New-PSItem =5%/12 60 500000 "=pmt(rate,nper,pv)"
New-PSItem =6%/12 60 500000 "=pmt(rate,nper,pv)" New-PSItem =6%/12 60 500000 "=pmt(rate,nper,pv)"
New-PSItem =7%/12 60 500000 "=pmt(rate,nper,pv)" New-PSItem =7%/12 60 500000 "=pmt(rate,nper,pv)"
) | Export-Excel functions.xlsx -AutoNameRange -AutoSize -Show ) | Export-Excel "$env:temp\functions.xlsx" -AutoNameRange -AutoSize -Show

View File

@@ -1,10 +1,10 @@
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {} try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
Remove-Item *.xlsx Remove-Item "$env:temp\hyperlink.xlsx" -ErrorAction SilentlyContinue
$( $(
New-PSItem '=Hyperlink("http://dougfinke.com/blog","Doug Finke")' @("Link") New-PSItem '=Hyperlink("http://dougfinke.com/blog","Doug Finke")' @("Link")
New-PSItem '=Hyperlink("http://blogs.msdn.com/b/powershell/","PowerShell Blog")' New-PSItem '=Hyperlink("http://blogs.msdn.com/b/powershell/","PowerShell Blog")'
New-PSItem '=Hyperlink("http://blogs.technet.com/b/heyscriptingguy/","Hey, Scripting Guy")' New-PSItem '=Hyperlink("http://blogs.technet.com/b/heyscriptingguy/","Hey, Scripting Guy")'
) | Export-Excel hyperlink.xlsx -AutoSize -Show ) | Export-Excel "$env:temp\hyperlink.xlsx" -AutoSize -Show

Binary file not shown.

Binary file not shown.

View File

@@ -25,7 +25,7 @@ Function Get-ExcelTableName {
$Stream.Close() $Stream.Close()
$Stream.Dispose() $Stream.Dispose()
$Excel.Dispose() $Excel.Dispose()
$Excel = $null $Excel = $null
} }
Function Get-ExcelTable { Function Get-ExcelTable {
@@ -66,7 +66,7 @@ Function Get-ExcelTable {
$propertyNames = for($col=$startCol; $col -lt ($startCol+$colCount); $col+= 1) { $propertyNames = for($col=$startCol; $col -lt ($startCol+$colCount); $col+= 1) {
$Worksheet.Cells[$startRow, $col].value $Worksheet.Cells[$startRow, $col].value
} }
$startRow++ $startRow++
for($row=$startRow; $row -lt ($startRow+$rowCount); $row += 1) { for($row=$startRow; $row -lt ($startRow+$rowCount); $row += 1) {
$nr=[ordered]@{} $nr=[ordered]@{}
@@ -92,13 +92,11 @@ function ConvertFrom-ExcelColumnName {
ForEach { ForEach {
$sum*=26 $sum*=26
$sum+=[char]$_.tostring().toupper()-[char]'A'+1 $sum+=[char]$_.tostring().toupper()-[char]'A'+1
} }
$sum $sum
} }
cls
ipmo .\ImportExcel.psd1 -Force ipmo .\ImportExcel.psd1 -Force
#Get-ExcelTableName .\testTable.xlsx | Get-ExcelTable .\testTable.xlsx #Get-ExcelTableName .\testTable.xlsx | Get-ExcelTable .\testTable.xlsx
Get-ExcelTable .\testTable.xlsx Table3 Get-ExcelTable .\testTable.xlsx Table3

View File

@@ -51,18 +51,16 @@ Install-Module ImportExcel -scope CurrentUser
```PowerShell ```PowerShell
Install-Module ImportExcel Install-Module ImportExcel
``` ```
- Lots of help improvements. - Lots of help improvements and some tidying up of examples
- Conditional formatting can now support named ranges, and booleans in the sheet as a condition. Also brought the two different kinds together inside export-excel - `Add-ConditionalFormatting`: Now wraps those strings in quotes when needed (for = <= >= string needs to be in double quotes). Parameter intellisense has been improved. There are new parameters: -StopIfTrue and -Priority and support for using the -Reverse parameter with Color-scale rules. Booleans in the sheet are now supported as the value for a condition. Also brought the two different kinds of condition together inside export-excel, and fixed a bug where named-ranges didn't work in some places. In `New-ConditionalText`, more types of conditional format are supported, and -ConditionalTextColor now has an argument completer
- Improved handling of hyperlinks. - Improved handling of hyperlinks in `Export-Excel`.
- Moved logic for adding a named range out of Export-Excel and into new function named Add-ExcelName, and for adding a table into a function named Add-Excel table; this is to make it easier to do these things independently of Export-Excel but minimize duplication. Add-Table command can now toggle the options from table tools toolbar (show totals etc) - `Export-Excel` has better checking of Table and PivotTable names (for uniqueness) and a new test in quick charts that there is suitable data for charting.
- Fixed issues where formatting could be reset when using Export-Excel to manipulate an existing sheet without appending data; this applied to number formats and tables. - Moved logic for adding a named range out of Export-Excel and into a new function named `Add-ExcelName`, and logic for adding a table into a function named `Add-ExcelTable`; this is to make it easier to do these things independently of Export-Excel, but minimize duplication. The Add-ExcelTable command has extra parameters to toggle the options from table tools toolbar (show totals etc)
- Moved PivotTable Functions out of Export-Excel.PS1 into their own file and moved Add-ExcelChart out of Export-Excel.ps1 into New-ExcelChart.ps1 - Moved PivotTable Functions out of Export-Excel.PS1 into their own file and moved Add-ExcelChart out of Export-Excel.ps1 into New-ExcelChart.ps1
- in Export-Excel there is better checking of Table and PivotTable names (for uniqueness) and a new test in quick charts that there is suitable data for charting. - Fixed issues where formatting could be reset when using Export-Excel to manipulate an existing sheet without appending data; this applied to number-formats and tables.
- in New-ConditionalText, more types of conditional format are supported, and conditionalTextColor now has an argument completer - `Add-PivotTable` has some new parameters -PassThru returns the pivot table (e.g. to allow names /sort orders of data series to be tweaked ) -Address parameter allows Pivot to be placed on an existing sheet; -PivotTableStyle allows a change from "Medium6", -PivotNumberFormat sets data cells. Chart creation has been moved out to Add-ExcelChart, and -PivotChartDefinition allows a defintion created with New-ExcelChartDefinition to be used with a PivotTable. This opens up all the things that Add-Excel chart can do without duplicating the parameters on Add-Pivot table and Export-Excel. Definition, TableStyle, Numberformat and ChartDefiniton can be used in `New-PivotTableDefinition` .
- in Add-ConditionalFormatting: improved parameter intellisense and now wrap those strings which need it in quotes (for = <= >= string needs to be in double quotes), added StopIfTrue and Priority Parameters - `Add-ExcelChart` now supports -PassThru to return the chart for tweaking after creation; there is now a -PivotTable parameter to allow Add-PivotTable to call the code in Add-ExcelChart. And in `New-ExcelChartDefinition` Legend parameters (for size, bold & position ) are now supported
- in New-ExcelChartDefinition: Legend parameters (for size, bold & position ) are now supported
- Add-ExcelChart now supports -PassThru to return the chart for tweaking after creation; there is now a -PivotTable parameter to allow Add-PivotTable to call the code in Add-ExcelChart
- in Add-PivotTable: chart creation has been moved out to Add-ExcelChart. -PassThru returns the pivot table (e.g. to allow names /sort orders of data series to be tweaked ) -Address parameter allows Pivot to be placed on an existing sheet; -PivotTableStyle allows a change from "Medium6", -PivotNumberFormat sets data cells and -PivotChartDefinition allows a defintion created with New-ExcelChartDefinition to be used. This opens up all the things that Add-Excel chart can do without duplicating the parameters on Add-Pivot table and Export-Excel. Definition, TableStyle, Numberformat and ChartDefiniton can be used in New-PivotTableDefinition .
# What's new in Release 5.2 # What's new in Release 5.2
- Value does not need to be mandatory in Set-Row or Set-Column, also tidied their parameters a little. - Value does not need to be mandatory in Set-Row or Set-Column, also tidied their parameters a little.

View File

@@ -9,7 +9,7 @@
$Excel = New-Object -TypeName OfficeOpenXml.ExcelPackage $Path $Excel = New-Object -TypeName OfficeOpenXml.ExcelPackage $Path
$workSheet = $Excel.Workbook.Worksheets[$WorkSheetName] $workSheet = $Excel.Workbook.Worksheets[$WorkSheetName]
if($workSheet) { if($workSheet) {
if($Excel.Workbook.Worksheets.Count -gt 1) { if($Excel.Workbook.Worksheets.Count -gt 1) {
$Excel.Workbook.Worksheets.Delete($workSheet) $Excel.Workbook.Worksheets.Delete($workSheet)
@@ -22,14 +22,13 @@
} }
$Excel.Save() $Excel.Save()
$Excel.Dispose() $Excel.Dispose()
} }
cls
ipmo .\ImportExcel.psd1 -Force Import-Module .\ImportExcel.psd1 -Force
$names = Get-ExcelSheetInfo C:\Temp\testDelete.xlsx $names = Get-ExcelSheetInfo C:\Temp\testDelete.xlsx
$names | % { Remove-WorkSheet C:\Temp\testDelete.xlsx $_.Name} $names | % { Remove-WorkSheet C:\Temp\testDelete.xlsx $_.Name}
##Remove-WorkSheet C:\Temp\testDelete.xlsx sheet6 ##Remove-WorkSheet C:\Temp\testDelete.xlsx sheet6

View File

@@ -1,4 +1,4 @@
Race,Date,FinishPosition,Driver,GridPostion,Team,Points Race,Date,FinishPosition,Driver,GridPosition,Team,Points
Australian,25/03/2018,1,Sebastian Vettel,3,Ferrari,25 Australian,25/03/2018,1,Sebastian Vettel,3,Ferrari,25
Australian,25/03/2018,2,Lewis Hamilton,1,Mercedes,18 Australian,25/03/2018,2,Lewis Hamilton,1,Mercedes,18
Australian,25/03/2018,3,Kimi Räikkönen,2,Ferrari,15 Australian,25/03/2018,3,Kimi Räikkönen,2,Ferrari,15
1 Race Date FinishPosition Driver GridPostion GridPosition Team Points
2 Australian 25/03/2018 1 Sebastian Vettel 3 Ferrari 25
3 Australian 25/03/2018 2 Lewis Hamilton 1 Mercedes 18
4 Australian 25/03/2018 3 Kimi Räikkönen 2 Ferrari 15

View File

@@ -1,6 +1,6 @@
$scriptPath = Split-Path -Path $MyInvocation.MyCommand.path -Parent $scriptPath = Split-Path -Path $MyInvocation.MyCommand.path -Parent
$dataPath = Join-Path -Path $scriptPath -ChildPath "First10Races.csv" $dataPath = Join-Path -Path $scriptPath -ChildPath "First10Races.csv"
Describe "Creating small named ranges with hyperlinks" { Describe "Creating small named ranges with hyperlinks" {
BeforeAll { BeforeAll {
$path = "$env:TEMP\Results.xlsx" $path = "$env:TEMP\Results.xlsx"
@@ -18,27 +18,29 @@ Describe "Creating small named ranges with hyperlinks" {
$worksheet = $excel.Workbook.Worksheets[1] $worksheet = $excel.Workbook.Worksheets[1]
$columns = $worksheet.Dimension.Columns $columns = $worksheet.Dimension.Columns
1..$columns | foreach {Add-ExcelName -Range $worksheet.cells[$topRow,$_,$lastDataRow,$_]} 1..$columns | foreach {Add-ExcelName -Range $worksheet.cells[$topRow,$_,$lastDataRow,$_]} #Test Add-Excel Name on its own (outside Export-Excel)
$scwarnVar = $null $scwarnVar = $null
Set-Column -Worksheet $worksheet -StartRow $topRow -Heading "PlacesGained/Lost" -Value "=GridPostion-FinishPosition" -AutoNameRange -WarningVariable scWarnVar -WarningAction SilentlyContinue Set-Column -Worksheet $worksheet -StartRow $topRow -Heading "PlacesGained/Lost" `
-Value "=GridPosition-FinishPosition" -AutoNameRange -WarningVariable scWarnVar -WarningAction SilentlyContinue #Test as many set column options as possible.
$columns ++ $columns ++
#create a table which covers all the data. And define a pivot table which uses the same address range. #create a table which covers all the data. And define a pivot table which uses the same address range.
$table = Add-ExcelTable -PassThru -Range $worksheet.cells[$topRow,1,$lastDataRow,$columns] -TableName "AllResults" -TableStyle Light7 -ShowHeader -ShowFilter -ShowColumnStripes -ShowRowStripes:$false -ShowFirstColumn:$false -ShowLastColumn:$false -ShowTotal:$false $table = Add-ExcelTable -PassThru -Range $worksheet.cells[$topRow,1,$lastDataRow,$columns] -TableName "AllResults" -TableStyle Light4 `
-ShowHeader -ShowFilter -ShowColumnStripes -ShowRowStripes:$false -ShowFirstColumn:$false -ShowLastColumn:$false -ShowTotal:$false #Test Add-ExcelTable outside export-Excel with as many options as possible.
$pt = New-PivotTableDefinition -PivotTableName Analysis -SourceWorkSheet $worksheet -SourceRange $table.address.address -PivotRows Driver -PivotData @{Points="SUM"} -PivotTotals None $pt = New-PivotTableDefinition -PivotTableName Analysis -SourceWorkSheet $worksheet -SourceRange $table.address.address -PivotRows Driver -PivotData @{Points="SUM"} -PivotTotals None
$cf = Add-ConditionalFormatting -Address $worksheet.cells[$topRow,$columns,$lastDataRow,$columns] -ThreeIconsSet Arrows -Passthru $cf = Add-ConditionalFormatting -Address $worksheet.cells[$topRow,$columns,$lastDataRow,$columns] -ThreeIconsSet Arrows -Passthru #Test using cells[r1,c1,r2,c2]
$cf.Icon2.Type = $cf.Icon3.Type = "Num" $cf.Icon2.Type = $cf.Icon3.Type = "Num"
$cf.Icon2.Value = 0 $cf.Icon2.Value = 0
$cf.Icon3.Value = 1 $cf.Icon3.Value = 1
Add-ConditionalFormatting -Address $worksheet.cells["FinishPosition"] -RuleType Equal -ConditionValue 1 -ForeGroundColor Purple -Bold -Priority 1 -StopIfTrue Add-ConditionalFormatting -Address $worksheet.cells["FinishPosition"] -RuleType Equal -ConditionValue 1 -ForeGroundColor Purple -Bold -Priority 1 -StopIfTrue #Test Priority and stopIfTrue and using range name
Add-ConditionalFormatting -Address $worksheet.Cells["GridPosition"] -RuleType ThreeColorScale -Reverse #Test Reverse
$ct = New-ConditionalText -Text "Ferrari" $ct = New-ConditionalText -Text "Ferrari"
$ct2 = New-ConditionalText -Range $worksheet.Names["FinishPosition"].Address -ConditionalType LessThanOrEqual -Text 3 -ConditionalTextColor Red -BackgroundColor White $ct2 = New-ConditionalText -Range $worksheet.Names["FinishPosition"].Address -ConditionalType LessThanOrEqual -Text 3 -ConditionalText Red -Background White #Test new-conditionalText in shortest and longest forms.
#Create links for each group name (race) and Export them so they start at Cell A1; create a pivot table with definition just created, save the file and open in Excel #Create links for each group name (race) and Export them so they start at Cell A1; create a pivot table with definition just created, save the file and open in Excel
$results | foreach {(New-Object -TypeName OfficeOpenXml.ExcelHyperLink -ArgumentList "Sheet1!$($_.Name)" , "$($_.name) GP")} | $results | foreach {(New-Object -TypeName OfficeOpenXml.ExcelHyperLink -ArgumentList "Sheet1!$($_.Name)" , "$($_.name) GP")} | #Test Exporting Hyperlinks with display property.
Export-Excel -ExcelPackage $excel -AutoSize -PivotTableDefinition $pt -Calculate -Conditionaltext $ct,$ct2 Export-Excel -ExcelPackage $excel -AutoSize -PivotTableDefinition $pt -Calculate -ConditionalFormat $ct,$ct2 #Test conditional text rules in conditional format (orignally icon sets only )
$excel = Open-ExcelPackage $path $excel = Open-ExcelPackage $path
$sheet = $excel.Workbook.Worksheets[1] $sheet = $excel.Workbook.Worksheets[1]
@@ -47,9 +49,9 @@ Describe "Creating small named ranges with hyperlinks" {
} }
Context "Creating hyperlinks" { Context "Creating hyperlinks" {
it "Put the data into the sheet and created the expected named ranges " { it "Put the data into the sheet and created the expected named ranges " {
$sheet.dimension.rows | should be $expectedRows $sheet.Dimension.Rows | should be $expectedRows
$sheet.dimension.columns | should be $columns $sheet.Dimension.Columns | should be $columns
$sheet.names.count | should be ($columns + $results.Count) $sheet.Names.Count | should be ($columns + $results.Count)
$sheet.Names[$results[0].Name] | should not benullorEmpty $sheet.Names[$results[0].Name] | should not benullorEmpty
$sheet.Names[$results[-1].Name] | should not benullorEmpty $sheet.Names[$results[-1].Name] | should not benullorEmpty
} }
@@ -62,14 +64,14 @@ Describe "Creating small named ranges with hyperlinks" {
It "Populated the cells with the right heading and formulas " { It "Populated the cells with the right heading and formulas " {
$sheet.Cells[( $results.Count),$columns] | Should benullorEmpty $sheet.Cells[( $results.Count),$columns] | Should benullorEmpty
$sheet.Cells[(1+$results.Count),$columns].Value | Should be "PlacesGained/Lost" $sheet.Cells[(1+$results.Count),$columns].Value | Should be "PlacesGained/Lost"
$sheet.Cells[(2+$results.Count),$columns].Formula | should be "GridPostion-FinishPosition" $sheet.Cells[(2+$results.Count),$columns].Formula | should be "GridPosition-FinishPosition"
$sheet.Names["PlacesGained_Lost"] | should not benullorEmpty $sheet.Names["PlacesGained_Lost"] | should not benullorEmpty
} }
It "Performed the calculation " { It "Performed the calculation " {
$placesMade = $Sheet.Cells[(2+$results.Count),5].value - $Sheet.Cells[(2+$results.Count),3].value $placesMade = $Sheet.Cells[(2+$results.Count),5].value - $Sheet.Cells[(2+$results.Count),3].value
$sheet.Cells[(2+$results.Count),$columns].value | Should be $placesmade $sheet.Cells[(2+$results.Count),$columns].value | Should be $placesmade
} }
It "Applied ConditionalFormatting, including stopifTrue and Priority " { It "Applied ConditionalFormatting, including StopIfTrue, Priority and Reverse " {
$sheet.ConditionalFormatting[0].Address.Start.Column | should be $columns $sheet.ConditionalFormatting[0].Address.Start.Column | should be $columns
$sheet.ConditionalFormatting[0].Address.End.Column | should be $columns $sheet.ConditionalFormatting[0].Address.End.Column | should be $columns
$sheet.ConditionalFormatting[0].Address.End.Row | should be $expectedRows $sheet.ConditionalFormatting[0].Address.End.Row | should be $expectedRows
@@ -78,16 +80,20 @@ Describe "Creating small named ranges with hyperlinks" {
$sheet.ConditionalFormatting[0].Icon3.Value | Should be 1 $sheet.ConditionalFormatting[0].Icon3.Value | Should be 1
$sheet.ConditionalFormatting[1].Priority | Should be 1 $sheet.ConditionalFormatting[1].Priority | Should be 1
$sheet.ConditionalFormatting[1].StopIfTrue | Should be $true $sheet.ConditionalFormatting[1].StopIfTrue | Should be $true
$sheet.ConditionalFormatting[3].LowValue.Color.R | Should begreaterThan 180
$sheet.ConditionalFormatting[3].LowValue.Color.G | Should beLessThan 128
$sheet.ConditionalFormatting[3].HighValue.Color.R | Should beLessThan 128
$sheet.ConditionalFormatting[3].HighValue.Color.G | Should begreaterThan 180
} }
} }
Context "Adding adding a table" { Context "Adding a table" {
it "Created a table " { it "Created a table " {
$sheet.tables[0] | Should not beNullOrEmpty $sheet.tables[0] | Should not beNullOrEmpty
$sheet.tables[0].Address.Start.Column | should be 1 $sheet.tables[0].Address.Start.Column | should be 1
$sheet.tables[0].Address.End.Column | should be $columns $sheet.tables[0].Address.End.Column | should be $columns
$sheet.tables[0].Address.Start.row | should be ($results.Count + 1) $sheet.tables[0].Address.Start.row | should be ($results.Count + 1)
$sheet.Tables[0].Address.End.Row | should be $expectedRows $sheet.Tables[0].Address.End.Row | should be $expectedRows
$sheet.Tables[0].StyleName | should be "TableStyleLight7" $sheet.Tables[0].StyleName | should be "TableStyleLight4"
$sheet.Tables[0].ShowColumnStripes | should be $true $sheet.Tables[0].ShowColumnStripes | should be $true
$sheet.Tables[0].ShowRowStripes | should not be $true $sheet.Tables[0].ShowRowStripes | should not be $true
} }