diff --git a/Examples/Pester-To-XLSx.ps1 b/Examples/Pester-To-XLSx.ps1
index 85b6933..0eafcf8 100644
--- a/Examples/Pester-To-XLSx.ps1
+++ b/Examples/Pester-To-XLSx.ps1
@@ -1,4 +1,5 @@
-[CmdletBinding(DefaultParameterSetName = 'Default')]
+[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSPossibleIncorrectComparisonWithNull','',Justification='Intentional use to select non null array items')]
+[CmdletBinding(DefaultParameterSetName = 'Default')]
param(
[Parameter(Position=0)]
[string]$XLFile,
@@ -49,6 +50,7 @@ if (-not $UseExisting) {
$InvokePesterParams.Remove('WorkSheetName')
Invoke-Pester @InvokePesterParams
}
+
if (-not (Test-Path -Path $InvokePesterParams['OutputFile'])) {
throw "Could not output file $($InvokePesterParams['OutputFile'])"; return
}
@@ -98,7 +100,7 @@ $testResults = foreach ($test in $resultXML.'test-suite'.results.'test-suite') {
Duration = $_.time
File = $testPs1File; Group = $Describe
SubGroup = $Context ; Name =($_.Description -replace '\s{2,}', ' ')
- Result = $_.result ; FullDesc = '=Group&" "&SubGroup&" "&Test'})
+ Result = $_.result ; FullDesc = '=Group&" "&SubGroup&" "&Name'})
}
}
}
@@ -124,7 +126,6 @@ if (-not $testResults) {Write-Warning 'No Results found' ; return}
$clearSheet = -not $Append
$excel = $testResults | Export-Excel -Path $xlFile -WorkSheetname $WorkSheetName -ClearSheet:$clearSheet -Append:$append -PassThru -BoldTopRow -FreezeTopRow -AutoSize -AutoFilter -AutoNameRange
$ws = $excel.Workbook.Worksheets[$WorkSheetName]
-
<# Worksheet should look like ..
|A |B |C D |E |F |G |H |I |J |K |L |M
1|Machine |OS |Date Time |Executed |Success |Duration |File |Group |SubGroup |Name |Result |FullDescription
diff --git a/Examples/PsGallery.ps1 b/Examples/PsGallery.ps1
new file mode 100644
index 0000000..2e5c44b
--- /dev/null
+++ b/Examples/PsGallery.ps1
@@ -0,0 +1,21 @@
+
+$top1000 = foreach ($p in 1..50) {
+ $c = Invoke-WebRequest -Uri "https://www.powershellgallery.com/packages" -method Post -Body "q=&sortOrder=package-download-count&page=$p"
+ [regex]::Matches($c.Content,'
', [System.Text.RegularExpressions.RegexOptions]::Singleline) | foreach {
+ $name = [regex]::Match($_, "(?<=)").value
+ $n = [regex]::replace($_,'^.*By:\s*','', [System.Text.RegularExpressions.RegexOptions]::Singleline)
+ $n = [regex]::replace($n,'.*$','', [System.Text.RegularExpressions.RegexOptions]::Singleline)
+ $by = [regex]::match($n,'(?<=">).*(?=)').value
+ $qty = [regex]::match($n,'\S*(?= downloads)').value
+ [PSCustomObject]@{
+ Name = $name
+ by = $by
+ Downloads = $qty
+ }
+ }
+}
+
+del "~\Documents\gallery.xlsx"
+$pivotdef = New-PivotTableDefinition -PivotTableName 'Summary' -PivotRows by -PivotData @{name="Count"
+ Downloads="Sum"} -PivotDataToColumn -Activate -ChartType ColumnClustered -PivotNumberFormat '#,###'
+$top1000 | export-excel -path '~\Documents\gallery.xlsx' -Numberformat '#,###' -PivotTableDefinition $pivotdef -TableName 'TopDownloads' -Show
\ No newline at end of file
diff --git a/Examples/Subtotals.ps1 b/Examples/Subtotals.ps1
index 24692ca..1e6bf0d 100644
--- a/Examples/Subtotals.ps1
+++ b/Examples/Subtotals.ps1
@@ -1,62 +1,78 @@
-$excelpath = "$env:temp\subtotal.xlsx"
-$SheetName = 'Sheet1'
-$SubtotalFieldName = 'Net'
-$GroupByFieldName = 'City'
-$SubtotalFormula = '=SUBTOTAL(3,D{0}:D{1})' # {0} and {1} are placeholders for the first and last row. D is the column to total in
- # 1=AVERAGE; 2=COUNT; 3=COUNTA; 4=MAX; 5=MIN; 6=PRODUCT; 7=STDEV; 8=STDEVP; 9=SUM; 10=VAR; 11=VARP add 100 to ignore hidden values
-
-Remove-Item -Path $excelpath -ErrorAction SilentlyContinue
-
-$Data = ConvertFrom-Csv @'
+$Data = ConvertFrom-Csv @'
Product, City, Gross, Net
Apple, London , 300, 250
Orange, London , 400, 350
Banana, London , 300, 200
+Grape, Munich, 100, 100
Orange, Paris, 600, 500
Banana, Paris, 300, 200
Apple, New York, 1200,700
'@
+$ExcelPath = "$env:temp\subtotal.xlsx"
+$SheetName = 'Sheet1'
+Remove-Item -Path $ExcelPath -ErrorAction SilentlyContinue
+
+
+$GroupByFieldName = 'City'
+$TotalSingleRows = $false
+$GrandTotal = $false
+$SubtotalRowHeight = 0 #If non zero will set subtotals to this height
+$Subtotals =@{ 'Net' = {"=SUBTOTAL(3,D{0}:D{1})" -f $from, $to}
+
+
+}
+$SubtotalFieldName = 'Net'
+
+$SubtotalFormula = '=SUBTOTAL(3,D{0}:D{1})' # {0} and {1} are placeholders for the first and last row. D is the column to total in
+ # 1=AVERAGE; 2=COUNT; 3=COUNTA; 4=MAX; 5=MIN; 6=PRODUCT; 7=STDEV; 8=STDEVP; 9=SUM; 10=VAR; 11=VARP add 100 to ignore hidden values
#at each change in the Group by field, insert a subtotal (count) formula in the title column & send to excel - list those rows and make them half height after export
$currentRow = 2
$lastChangeRow = 2
$insertedRows = @()
-$hideRows = @()
+#$hideRows = @()
$lastValue = $Data[0].$GroupByFieldName
$excel = $Data | ForEach-Object -Process {
- if ($_.$GroupByFieldName -ne $lastvalue) {
- $Formula = $SubtotalFormula -f $lastChangeRow, ($currentrow - 1)
- if ($lastChangeRow -eq ($currentrow - 1)) {$hideRows += $CurrentRow }
- else {$insertedRows += $CurrentRow }
- [pscustomobject]@{$SubtotalFieldName=$Formula}
- $currentRow += 1
- $lastChangeRow = $currentRow
- $lastValue = $_.$GroupByFieldName
+ if ($_.$GroupByFieldName -ne $lastvalue) {
+ if ($lastChangeRow -lt ($currentrow - 1) -or $totalSingleRows) {
+ $formula = $SubtotalFormula -f $lastChangeRow, ($currentrow - 1)
+ $insertedRows += $currentRow
+ [pscustomobject]@{$SubtotalFieldName = $formula}
+ $currentRow += 1
+ }
+ $lastChangeRow = $currentRow
+ $lastValue = $_.$GroupByFieldName
}
$_
$currentRow += 1
} -end {
- $Formula = $SubtotalFormula -f $lastChangeRow, ($currentrow - 1)
- [pscustomobject]@{$SubtotalFieldName=$Formula}
-} | Export-Excel -Path $excelpath -PassThru -AutoSize -AutoFilter -BoldTopRow -WorksheetName $SheetName
+ $formula = $SubtotalFormula -f $lastChangeRow, ($currentrow - 1)
+ [pscustomobject]@{$SubtotalFieldName=$formula}
+ if ($GrandTotal) {
+ $formula = $SubtotalFormula -f $lastChangeRow, ($currentrow - 1)
+ [pscustomobject]@{$SubtotalFieldName=$formula}
+ }
+} | Export-Excel -Path $ExcelPath -PassThru -AutoSize -AutoFilter -BoldTopRow -WorksheetName $sheetName
-#We kept a lists of the total rows Since 1 rows won't get expand/collapse hide them.
-#foreach ($r in $insertedrows) { $excel.WorkItems.Row($r).Height = 8}
-foreach ($r in $hideRows) { $excel.$SheetName.Row($r).hidden = $true}
+#We kept a lists of the total rows. Since single rows won't get expanded/collapsed hide them.
+if ($subtotalrowHeight) {
+ foreach ($r in $insertedrows) { $excel.WorkItems.Row($r).Height = $SubtotalRowHeight}
+}
+#foreach ($r in $hideRows) { $excel.$SheetName.Row($r).hidden = $true}
$range = $excel.$SheetName.Dimension.Address
-$SheetIndex = $excel.Sheet1.Index
+$sheetIndex = $excel.Sheet1.Index
Close-ExcelPackage -ExcelPackage $excel
try { $excelApp = New-Object -ComObject "Excel.Application" }
catch { Write-Warning "Could not start Excel application - which usually means it is not installed." ; return }
-try { $excelWorkBook = $excelApp.Workbooks.Open($excelpath) }
-catch { Write-Warning -Message "Could not Open $excelpath." ; return }
-$ws = $excelWorkBook.Worksheets.Item($SheetIndex)
+try { $excelWorkBook = $excelApp.Workbooks.Open($ExcelPath) }
+catch { Write-Warning -Message "Could not Open $ExcelPath." ; return }
+$ws = $excelWorkBook.Worksheets.Item($sheetIndex)
$null = $ws.Range($range).Select()
$null = $excelapp.Selection.AutoOutline()
$excelWorkBook.Save()
$excelWorkBook.Close()
$excelApp.Quit()
-Start $excelpath
\ No newline at end of file
+Start-Process $ExcelPath
\ No newline at end of file