Compare commits

..

29 Commits

Author SHA1 Message Date
dfinke
3c23a064bc Add -ShowOnlyIcon to New-ConditionalFormattingIconSet. Base on https://github.com/dfinke/ImportExcel/discussions/1340 2022-12-10 18:22:36 -05:00
Doug Finke
c848497f53 Merge pull request #1305 from thkn-hofa/master
TotalSettings improvements
2022-11-19 08:09:35 -05:00
dfinke
ba374ec558 tweak test 2022-11-19 08:03:37 -05:00
Doug Finke
3f772ce726 Merge pull request #1285 from steve-daedilus/master
#1281 Grammar error update
2022-11-19 07:47:58 -05:00
Thomas Hofkens
3ea6fde928 changelog update + Pester test fix for powershell 5.1 2022-11-14 17:54:15 +01:00
Thomas Hofkens
81ece62494 Fix Pester errors for countries with ',' as decimal separator 2022-11-14 17:33:21 +01:00
Thomas Hofkens
828b2caf9f Implement Set Column by range in Add-ExcelTable + simplify adding table from Export-Excel 2022-11-14 17:32:39 +01:00
Thomas Hofkens
f760b63818 Update Set-CellComment to use 'Range' parameter + Create tests file 2022-11-14 17:31:36 +01:00
Thomas Hofkens
fe016f732d Bugfix example script 2022-11-12 00:52:15 +01:00
Thomas Hofkens
c719cc3d32 Doc update 2022-11-12 00:42:36 +01:00
Thomas Hofkens
5558f48732 Changelog update: TableTotalSettings in stead of TotalSettings 2022-11-12 00:42:24 +01:00
Thomas Hofkens
4dfd211bb6 Newlines after ```text because of help build failures 2022-11-12 00:41:57 +01:00
Thomas Hofkens
90bc047267 Updated Documentation 2022-11-12 00:26:49 +01:00
Thomas Hofkens
4c0e7970cf Updated Examples 2022-11-12 00:26:40 +01:00
Thomas Hofkens
b191f16e3e Updated Tests 2022-11-12 00:26:19 +01:00
Thomas Hofkens
ce49038b75 Changed TotalSettings to TableTotalSettings + Changed the way custom formulas are added + added possibility to add comments tot totals row 2022-11-12 00:25:56 +01:00
Thomas Hofkens
652a611137 Added new function 'Set-CellComment' 2022-11-12 00:24:17 +01:00
Doug Finke
3b73ce24ae Merge pull request #1300 from thkn-hofa/master
Add TotalSettings parameter to Export-Excel
2022-11-11 10:01:17 -05:00
dfinke
5e8afa48fc Add a Sales Data example, known data and diff criteria in the COUNTIF 2022-11-11 09:38:56 -05:00
Thomas Hofkens
f494635b48 Added custom formula for totals row + Example File 2022-11-09 11:35:19 +01:00
Thomas Hofkens
dcb67b4518 Merged Export-Excel-TotalSettings.Tests.ps1 with Export-Excel.Tests.ps1 2022-11-08 16:31:02 +01:00
Thomas Hofkens
06c00cb0b2 Expanded Unit Tests 2022-11-06 12:07:05 +01:00
Thomas Hofkens
d987437ad6 Unit Tests 2022-11-06 11:52:34 +01:00
Thomas Hofkens
fe27ff81c8 bump version, update changelog 2022-11-04 15:26:23 +01:00
Thomas Hofkens
9f4307f6c0 Add TotalSettings parameter to Export-Excel 2022-11-04 15:05:28 +01:00
Stephen Brown
a1fccf914f Merge remote-tracking branch 'upstream/master' 2022-10-22 00:44:36 +01:00
Doug Finke
0b4c2b81db Merge pull request #1283 from stahler/patch-5
Update add-excelchart.md
2022-10-21 10:48:13 -04:00
Stephen Brown
8ee34217a4 #1281 Grammar error update 2022-10-21 13:53:13 +01:00
Wes Stahler
c01601910d Update add-excelchart.md
Correct minor spelling
2022-10-20 21:11:27 -04:00
23 changed files with 4153 additions and 4737 deletions

View File

@@ -0,0 +1,22 @@
try { Import-Module $PSScriptRoot\..\..\ImportExcel.psd1 } catch { throw ; return }
$data = ConvertFrom-Csv @"
Region,State,Other,Units,Price,InStock
West,Texas,1,927,923.71,1
North,Tennessee,3,466,770.67,0
East,Florida,0,1520,458.68,1
East,Maine,1,1828,661.24,0
West,Virginia,1,465,053.58,1
North,Missouri,1,436,235.67,1
South,Kansas,0,214,992.47,1
North,North Dakota,1,789,640.72,0
South,Delaware,-1,712,508.55,1
"@
$xlfile = "$PSScriptRoot\test.xlsx"
Remove-Item $xlfile -ErrorAction SilentlyContinue
$cfi1 = New-ConditionalFormattingIconSet -Range C:C -ConditionalFormat ThreeIconSet -IconType Symbols -ShowIconOnly
$cfi2 = New-ConditionalFormattingIconSet -Range F:F -ConditionalFormat ThreeIconSet -IconType Symbols2 -ShowIconOnly
$data | Export-Excel $xlfile -AutoSize -ConditionalFormat $cfi1, $cfi2 -Show

View File

@@ -0,0 +1,29 @@
try { Import-Module $PSScriptRoot\..\..\ImportExcel.psd1 } catch { throw ; return }
$data = ConvertFrom-Csv @"
OrderId,Category,Sales,Quantity,Discount
1,Cosmetics,744.01,07,0.7
2,Grocery,349.13,25,0.3
3,Apparels,535.11,88,0.2
4,Electronics,524.69,60,0.1
5,Electronics,439.10,41,0.0
6,Apparels,56.84,54,0.8
7,Electronics,326.66,97,0.7
8,Cosmetics,17.25,74,0.6
9,Grocery,199.96,39,0.4
10,Grocery,731.77,20,0.3
"@
$xlfile = "$PSScriptRoot\TotalsRow.xlsx"
Remove-Item $xlfile -ErrorAction SilentlyContinue
$TableTotalSettings = @{
Quantity = 'Sum'
Category = '=COUNTIF([Category],"<>Electronics")' # Count the number of categories not equal to Electronics
Sales = @{
Function = '=SUMIF([Category],"<>Electronics",[Sales])'
Comment = "Sum of sales for everything that is NOT Electronics"
}
}
$data | Export-Excel -Path $xlfile -TableName Sales -TableStyle Medium10 -TableTotalSettings $TableTotalSettings -AutoSize -Show

View File

@@ -0,0 +1,16 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$r = Get-ChildItem C:\WINDOWS\system32 -File
$TotalSettings = @{
Name = "Count"
# You can create the formula in an Excel workbook first and copy-paste it here
# This syntax can only be used for the Custom type
Extension = "=COUNTIF([Extension];`".exe`")"
Length = @{
Function = "=SUMIF([Extension];`".exe`";[Length])"
Comment = "Sum of all exe sizes"
}
}
$r | Export-Excel -TableName system32files -TableStyle Medium10 -TableTotalSettings $TotalSettings -Show

View File

@@ -6,7 +6,7 @@
RootModule = 'ImportExcel.psm1' RootModule = 'ImportExcel.psm1'
# Version number of this module. # Version number of this module.
ModuleVersion = '7.8.2' ModuleVersion = '7.8.4'
# ID used to uniquely identify this module # ID used to uniquely identify this module
GUID = '60dd4136-feff-401a-ba27-a84458c57ede' GUID = '60dd4136-feff-401a-ba27-a84458c57ede'
@@ -88,6 +88,7 @@ Check out the How To Videos https://www.youtube.com/watch?v=U3Ne_yX4tYo&list=PL5
'Remove-Worksheet', 'Remove-Worksheet',
'Select-Worksheet', 'Select-Worksheet',
'Send-SQLDataToExcel', 'Send-SQLDataToExcel',
'Set-CellComment',
'Set-CellStyle', 'Set-CellStyle',
'Set-ExcelColumn', 'Set-ExcelColumn',
'Set-ExcelRange', 'Set-ExcelRange',

View File

@@ -23,6 +23,7 @@
[Parameter(ParameterSetName = "FourIconSet")] [Parameter(ParameterSetName = "FourIconSet")]
[Parameter(ParameterSetName = "FiveIconSet")] [Parameter(ParameterSetName = "FiveIconSet")]
[switch]$Reverse, [switch]$Reverse,
[switch]$ShowIconOnly,
[Parameter(ParameterSetName = "NamedRule",Position = 2)] [Parameter(ParameterSetName = "NamedRule",Position = 2)]
$ConditionValue, $ConditionValue,
[Parameter(ParameterSetName = "NamedRule",Position = 3)] [Parameter(ParameterSetName = "NamedRule",Position = 3)]
@@ -84,6 +85,9 @@
elseif ($PSBoundParameters.ContainsKey("FourIconsSet" ) ) {$rule = $Worksheet.ConditionalFormatting.AddFourIconSet( $Address , $FourIconsSet )} elseif ($PSBoundParameters.ContainsKey("FourIconsSet" ) ) {$rule = $Worksheet.ConditionalFormatting.AddFourIconSet( $Address , $FourIconsSet )}
elseif ($PSBoundParameters.ContainsKey("FiveIconsSet" ) ) {$rule = $Worksheet.ConditionalFormatting.AddFiveIconSet( $Address , $FiveIconsSet )} elseif ($PSBoundParameters.ContainsKey("FiveIconsSet" ) ) {$rule = $Worksheet.ConditionalFormatting.AddFiveIconSet( $Address , $FiveIconsSet )}
else {$rule = ($Worksheet.ConditionalFormatting)."Add$RuleType"($Address ) } else {$rule = ($Worksheet.ConditionalFormatting)."Add$RuleType"($Address ) }
If($ShowIconOnly) {
$rule.ShowValue = $false
}
if ($Reverse) { if ($Reverse) {
if ($rule.type -match 'IconSet$' ) {$rule.reverse = $true} 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} elseif ($rule.type -match 'ColorScale$') {$temp =$rule.LowValue.Color ; $rule.LowValue.Color = $rule.HighValue.Color; $rule.HighValue.Color = $temp}

View File

@@ -9,7 +9,7 @@ function Add-ExcelTable {
[Switch]$ShowHeader , [Switch]$ShowHeader ,
[Switch]$ShowFilter, [Switch]$ShowFilter,
[Switch]$ShowTotal, [Switch]$ShowTotal,
[hashtable]$TotalSettings, [hashtable]$TableTotalSettings,
[Switch]$ShowFirstColumn, [Switch]$ShowFirstColumn,
[Switch]$ShowLastColumn, [Switch]$ShowLastColumn,
[Switch]$ShowRowStripes, [Switch]$ShowRowStripes,
@@ -51,14 +51,65 @@ function Add-ExcelTable {
} }
#it seems that show total changes some of the others, so the sequence matters. #it seems that show total changes some of the others, so the sequence matters.
if ($PSBoundParameters.ContainsKey('ShowHeader')) {$tbl.ShowHeader = [bool]$ShowHeader} if ($PSBoundParameters.ContainsKey('ShowHeader')) {$tbl.ShowHeader = [bool]$ShowHeader}
if ($PSBoundParameters.ContainsKey('TotalSettings')) { if ($PSBoundParameters.ContainsKey('TableTotalSettings') -And $Null -ne $TableTotalSettings) {
$tbl.ShowTotal = $true $tbl.ShowTotal = $true
foreach ($k in $TotalSettings.keys) { foreach ($k in $TableTotalSettings.keys) {
if (-not $tbl.Columns[$k]) {Write-Warning -Message "Table does not have a Column '$k'."}
elseif ($TotalSettings[$k] -notin @("Average", "Count", "CountNums", "Max", "Min", "None", "StdDev", "Sum", "Var") ) { # Get the Function to be added in the totals row
Write-Warning -Message "'$($TotalSettings[$k])' is not a valid total function." if ($TableTotalSettings[$k] -is [HashTable]) {
If ($TableTotalSettings[$k].Keys -contains "Function") {
$TotalFunction = $TableTotalSettings[$k]["Function"]
}
Else { Write-Warning -Message "TableTotalSettings parameter for column '$k' needs a key 'Function'" }
}
else {
$TotalFunction = [String]($TableTotalSettings[$k])
}
# Add the totals row
if (-not $tbl.Columns[$k]) {Write-Warning -Message "Table does not have a Column '$k'."}
elseif ($TotalFunction -match "^=") {
### A function in Excel uses ";" between parameters but the OpenXML parameter separator is ","
### Only replace semicolon when it's NOT somewhere between quotes quotes.
# Get all text between quotes
$QuoteMatches = [Regex]::Matches($TotalFunction,"`"[^`"]*`"|'[^']*'")
# Create array with all indexes of characters between quotes (and the quotes themselves)
$QuoteCharIndexes = $(
Foreach ($QuoteMatch in $QuoteMatches) {
(($QuoteMatch.Index)..($QuoteMatch.Index + $QuoteMatch.Length - 1))
}
)
# Get all semicolons
$SemiColonMatches = [Regex]::Matches($TotalFunction, ";")
# Replace the semicolons of which the index is not in the list of quote-text indexes
Foreach ($SemiColonMatch in $SemiColonMatches.Index) {
If ($QuoteCharIndexes -notcontains $SemiColonMatch) {
$TotalFunction = $TotalFunction.remove($SemiColonMatch,1).Insert($SemiColonMatch,",")
}
}
# Configure the formula. The TotalsRowFunction is automatically set to "Custom" when the TotalsRowFormula is set.
$tbl.Columns[$k].TotalsRowFormula = $TotalFunction
}
elseif ($TotalFunction -notin @("Average", "Count", "CountNums", "Max", "Min", "None", "StdDev", "Sum", "Var") ) {
Write-Warning -Message "'$($TotalFunction)' is not a valid total function."
}
else {$tbl.Columns[$k].TotalsRowFunction = $TotalFunction}
# Set comment on totals row
If ($TableTotalSettings[$k] -is [HashTable] -and $TableTotalSettings[$k].Keys -contains "Comment" -and ![String]::IsNullOrEmpty($TableTotalSettings[$k]["Comment"])) {
$ColumnLetter = [officeOpenXml.ExcelAddress]::GetAddressCol(($tbl.columns | ? { $_.name -eq $k }).Id, $False)
$CommentRange = "{0}{1}" -f $ColumnLetter, $tbl.Address.End.Row
$CellCommentParams = @{
Worksheet = $tbl.WorkSheet
Range = $CommentRange
Text = $TableTotalSettings[$k]["Comment"]
}
Set-CellComment @CellCommentParams
} }
else {$tbl.Columns[$k].TotalsRowFunction = $TotalSettings[$k]}
} }
} }
elseif ($PSBoundParameters.ContainsKey('ShowTotal')) {$tbl.ShowTotal = [bool]$ShowTotal} elseif ($PSBoundParameters.ContainsKey('ShowTotal')) {$tbl.ShowTotal = [bool]$ShowTotal}

View File

@@ -56,6 +56,7 @@
[Alias('Table')] [Alias('Table')]
$TableName, $TableName,
[OfficeOpenXml.Table.TableStyles]$TableStyle = [OfficeOpenXml.Table.TableStyles]::Medium6, [OfficeOpenXml.Table.TableStyles]$TableStyle = [OfficeOpenXml.Table.TableStyles]::Medium6,
[HashTable]$TableTotalSettings,
[Switch]$BarChart, [Switch]$BarChart,
[Switch]$PieChart, [Switch]$PieChart,
[Switch]$LineChart , [Switch]$LineChart ,
@@ -211,7 +212,7 @@
$row ++ $row ++
$null = $ws.Cells[$row, $StartColumn].LoadFromDataTable($InputObject, $false ) $null = $ws.Cells[$row, $StartColumn].LoadFromDataTable($InputObject, $false )
if ($TableName -or $PSBoundParameters.ContainsKey('TableStyle')) { if ($TableName -or $PSBoundParameters.ContainsKey('TableStyle')) {
Add-ExcelTable -Range $ws.Cells[$ws.Dimension] -TableName $TableName -TableStyle $TableStyle Add-ExcelTable -Range $ws.Cells[$ws.Dimension] -TableName $TableName -TableStyle $TableStyle -TableTotalSettings $TableTotalSettings
} }
} }
else { else {
@@ -424,7 +425,7 @@
if ($null -ne $TableName -or $PSBoundParameters.ContainsKey('TableStyle')) { if ($null -ne $TableName -or $PSBoundParameters.ContainsKey('TableStyle')) {
#Already inserted Excel table if input was a DataTable #Already inserted Excel table if input was a DataTable
if ($InputObject -isnot [System.Data.DataTable]) { if ($InputObject -isnot [System.Data.DataTable]) {
Add-ExcelTable -Range $ws.Cells[$dataRange] -TableName $TableName -TableStyle $TableStyle Add-ExcelTable -Range $ws.Cells[$dataRange] -TableName $TableName -TableStyle $TableStyle -TableTotalSettings $TableTotalSettings
} }
} }
elseif ($AutoFilter) { elseif ($AutoFilter) {
@@ -636,9 +637,9 @@
} }
elseif ($c.formatter) { elseif ($c.formatter) {
switch ($c.formatter) { switch ($c.formatter) {
"ThreeIconSet" { Add-ConditionalFormatting -Worksheet $ws -ThreeIconsSet $c.IconType -range $c.range -reverse:$c.reverse } "ThreeIconSet" { Add-ConditionalFormatting -Worksheet $ws -ThreeIconsSet $c.IconType -range $c.range -reverse:$c.reverse -ShowIconOnly:$c.ShowIconOnly}
"FourIconSet" { Add-ConditionalFormatting -Worksheet $ws -FourIconsSet $c.IconType -range $c.range -reverse:$c.reverse } "FourIconSet" { Add-ConditionalFormatting -Worksheet $ws -FourIconsSet $c.IconType -range $c.range -reverse:$c.reverse -ShowIconOnly:$c.ShowIconOnly}
"FiveIconSet" { Add-ConditionalFormatting -Worksheet $ws -FiveIconsSet $c.IconType -range $c.range -reverse:$c.reverse } "FiveIconSet" { Add-ConditionalFormatting -Worksheet $ws -FiveIconsSet $c.IconType -range $c.range -reverse:$c.reverse -ShowIconOnly:$c.ShowIconOnly}
} }
Write-Verbose -Message "Added conditional formatting to range $($c.range)" Write-Verbose -Message "Added conditional formatting to range $($c.range)"
} }

View File

@@ -235,13 +235,7 @@
# Write-Verbose "Import cell '$($Worksheet.Cells[$R, $P.Column].Address)' with property name '$($p.Value)' and value '$($Worksheet.Cells[$R, $P.Column].Value)'." # Write-Verbose "Import cell '$($Worksheet.Cells[$R, $P.Column].Address)' with property name '$($p.Value)' and value '$($Worksheet.Cells[$R, $P.Column].Value)'."
} }
} }
$xlBook["$targetSheetname"] += [PSCustomObject]$NewRow
if ($WorksheetName -eq '*') {
$xlBook["$targetSheetname"] += [PSCustomObject]$NewRow
}
else {
[PSCustomObject]$NewRow
}
} }
#endregion #endregion
} }
@@ -253,20 +247,17 @@
# $EndColumn = 0 # $EndColumn = 0
if ($Path) { $stream.close(); $ExcelPackage.Dispose() } if ($Path) { $stream.close(); $ExcelPackage.Dispose() }
if ($WorksheetName -eq '*') { if ($Raw) {
foreach ($entry in $xlbook.GetEnumerator()) {
if ($Raw) { $entry.Value
foreach ($entry in $xlbook.GetEnumerator()) {
$entry.Value
}
}
elseif ($Worksheet.Count -eq 1) {
$xlBook["$targetSheetname"]
}
else {
$xlBook
} }
} }
elseif ($Worksheet.Count -eq 1) {
$xlBook["$targetSheetname"]
}
else {
$xlBook
}
} }
} }
} }

View File

@@ -1,11 +1,12 @@
function New-ConditionalFormattingIconSet { function New-ConditionalFormattingIconSet {
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '',Justification='Does not change system State')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Does not change system State')]
param( param(
[Parameter(Mandatory=$true)] [Parameter(Mandatory = $true)]
$Range, $Range,
[ValidateSet("ThreeIconSet","FourIconSet","FiveIconSet")] [ValidateSet("ThreeIconSet", "FourIconSet", "FiveIconSet")]
$ConditionalFormat, $ConditionalFormat,
[Switch]$Reverse [Switch]$Reverse,
[Switch]$ShowIconOnly
) )
DynamicParam { DynamicParam {
@@ -40,13 +41,14 @@ function New-ConditionalFormattingIconSet {
End { End {
$bp = @{}+$PSBoundParameters $bp = @{} + $PSBoundParameters
$obj = [PSCustomObject]@{ $obj = [PSCustomObject]@{
Range = $Range Range = $Range
Formatter = $ConditionalFormat Formatter = $ConditionalFormat
IconType = $bp.IconType IconType = $bp.IconType
Reverse = $Reverse Reverse = $Reverse
ShowIconOnly = $ShowIconOnly
} }
$obj.pstypenames.Clear() $obj.pstypenames.Clear()

View File

@@ -0,0 +1,70 @@
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Scope='Function', Target='Set*', Justification='Does not change system state')]
param()
function Set-CellComment {
[CmdletBinding(DefaultParameterSetName = "Range")]
param(
[Parameter(Mandatory = $True, ParameterSetName = "ColumnLetter")]
[Parameter(Mandatory = $True, ParameterSetName = "ColumnNumber")]
[Parameter(Mandatory = $False, ParameterSetName = "Range")]
[OfficeOpenXml.ExcelWorkSheet]$Worksheet,
[Parameter(Mandatory = $True, ParameterSetName = "Range", ValueFromPipeline = $true,Position=0)]
[Alias("Address")]
$Range,
[Parameter(Mandatory = $True, ParameterSetName = "ColumnLetter")]
[Parameter(Mandatory = $True, ParameterSetName = "ColumnNumber")]
[Int]$Row,
[Parameter(Mandatory = $True, ParameterSetName = "ColumnLetter")]
[String]$ColumnLetter,
[Parameter(Mandatory = $True, ParameterSetName = "ColumnNumber")]
[Int]$ColumnNumber,
[Parameter(Mandatory = $True)]
[String]$Text
)
If ($PSCmdlet.ParameterSetName -eq "Range") {
Write-Verbose "Using 'Range' Parameter Set"
if ($Range -is [Array]) {
$null = $PSBoundParameters.Remove("Range")
$Range | Set-CellComment @PSBoundParameters
}
else {
#We should accept, a worksheet and a name of a range or a cell address; a table; the address of a table; a named range; a row, a column or .Cells[ ]
if ($Range -is [OfficeOpenXml.Table.ExcelTable]) {$Range = $Range.Address}
elseif ($Worksheet -and $Range -is [string]) {
# Convert range as string to OfficeOpenXml.ExcelAddress
$Range = [OfficeOpenXml.ExcelAddress]::new($Range)
}
elseif ($Range -is [string]) {Write-Warning -Message "The range parameter you have specified also needs a worksheet parameter." ;return}
#else we assume $Range is a OfficeOpenXml.ExcelAddress
}
}
ElseIf ($PSCmdlet.ParameterSetName -eq "ColumnNumber") {
$Range = [OfficeOpenXml.ExcelAddress]::new($Row, $ColumnNumber, $Row, $ColumnNumber)
}
ElseIf ($PSCmdlet.ParameterSetName -eq "ColumnLetter") {
$Range = [OfficeOpenXml.ExcelAddress]::new(("{0}{1}" -f $ColumnLetter,$Row))
}
If ($Range -isnot [Array]) {
Foreach ($c in $Worksheet.Cells[$Range]) {
write-verbose $c.address
Try {
If ($Null -eq $c.comment) {
[Void]$c.AddComment($Text, "ImportExcel")
}
Else {
$c.Comment.Text = $Text
$c.Comment.Author = "ImportExcel"
}
$c.Comment.AutoFit = $True
}
Catch { "Could not add comment to cell {0}: {1}" -f $c.Address, $_.ToString() }
}
}
}

View File

@@ -1,4 +1,4 @@
#Requires -Modules Pester #Requires -Modules @{ ModuleName="Pester"; ModuleVersion="4.0.0" }
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '', Justification = 'False Positives')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '', Justification = 'False Positives')]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidAssignmentToAutomaticVariable', '', Justification = 'Only executes on versions without the automatic variable')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidAssignmentToAutomaticVariable', '', Justification = 'Only executes on versions without the automatic variable')]
param() param()
@@ -683,6 +683,72 @@ Describe ExportExcel -Tag "ExportExcel" {
} }
} }
Context "#Example 10 # Creates a file with a table with a 'totals' row".PadRight(87) {
BeforeEach {
$path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue
#Test with a maximum of 50 processes for speed; export limited set of properties.
$processes = Get-Process | Where-Object { $_.StartTime } | Select-Object -First 50
# Export as table with a totals row with a set of possibilities
$TableTotalSettings = @{
Id = "COUNT"
WS = "SUM"
Handles = "AVERAGE"
CPU = '=COUNTIF([CPU];"<1")'
NPM = @{
Function = '=SUMIF([Name];"=Chrome";[NPM])'
Comment = "Sum of Non-Paged Memory (NPM) for all chrome processes"
}
}
$Processes | Export-Excel $path -TableName "processes" -TableTotalSettings $TableTotalSettings
$TotalRows = $Processes.count + 2 # Column header + Data (50 processes) + Totals row
$Excel = Open-ExcelPackage -Path $path
$ws = $Excel.Workbook.Worksheets[1]
}
it "Totals row was created".PadRight(87) {
$ws.Tables[0].Address.Rows | Should -Be $TotalRows
$ws.tables[0].ShowTotal | Should -Be $True
}
it "Added four calculations in the totals row".PadRight(87) {
$IDcolumn = $ws.Tables[0].Columns | Where-Object { $_.Name -eq "id" }
$WScolumn = $ws.Tables[0].Columns | Where-Object { $_.Name -eq "WS" }
$HandlesColumn = $ws.Tables[0].Columns | Where-Object { $_.Name -eq "Handles" }
$CPUColumn = $ws.Tables[0].Columns | Where-Object { $_.Name -eq "CPU" }
$NPMColumn = $ws.Tables[0].Columns | Where-Object { $_.Name -eq "NPM" }
# Testing column properties
$IDcolumn | Select-Object -ExpandProperty TotalsRowFunction | Should -Be "Count"
$WScolumn | Select-Object -ExpandProperty TotalsRowFunction | Should -Be "Sum"
$HandlesColumn | Select-Object -ExpandProperty TotalsRowFunction | Should -Be "Average"
$CPUColumn | Select-Object -ExpandProperty TotalsRowFunction | Should -Be "Custom"
$CPUColumn | Select-Object -ExpandProperty TotalsRowFormula | Should -Be 'COUNTIF([CPU],"<1")'
$NPMColumn | Select-Object -ExpandProperty TotalsRowFunction | Should -Be "Custom"
$NPMColumn | Select-Object -ExpandProperty TotalsRowFormula | Should -Be 'SUMIF([Name],"=Chrome",[NPM])'
# Testing actual cell properties
$CountAddress = "{0}{1}" -f (Get-ExcelColumnName -ColumnNumber $IDcolumn.Id).ColumnName, $TotalRows
$SumAddress = "{0}{1}" -f (Get-ExcelColumnName -ColumnNumber $WScolumn.Id).ColumnName, $TotalRows
$AverageAddress = "{0}{1}" -f (Get-ExcelColumnName -ColumnNumber $HandlesColumn.Id).ColumnName, $TotalRows
$CustomAddress = "{0}{1}" -f (Get-ExcelColumnName -ColumnNumber $CPUColumn.Id).ColumnName, $TotalRows
$CustomCommentAddress = "{0}{1}" -f (Get-ExcelColumnName -ColumnNumber $NPMColumn.Id).ColumnName, $TotalRows
$ws.Cells[$CountAddress].Formula | Should -Be "SUBTOTAL(103,processes[Id])"
$ws.Cells[$SumAddress].Formula | Should -Be "SUBTOTAL(109,processes[Ws])"
$ws.Cells[$AverageAddress].Formula | Should -Be "SUBTOTAL(101,processes[Handles])"
$ws.Cells[$CustomAddress].Formula | Should -Be 'COUNTIF([CPU],"<1")'
$ws.Cells[$CustomCommentAddress].Formula | Should -Be 'SUMIF([Name],"=Chrome",[NPM])'
$ws.Cells[$CustomCommentAddress].Comment.Text | Should -Not -BeNullOrEmpty
}
AfterEach {
Close-ExcelPackage -ExcelPackage $Excel
}
}
# Context "#Example 11 # Create and append with title, inc ranges and Pivot table" { # Context "#Example 11 # Create and append with title, inc ranges and Pivot table" {
# $path = "TestDrive:\test.xlsx" # $path = "TestDrive:\test.xlsx"
# #Test New-PivotTableDefinition builds definition using -Pivotfilter and -PivotTotals options. # #Test New-PivotTableDefinition builds definition using -Pivotfilter and -PivotTotals options.

View File

@@ -1,12 +0,0 @@
Import-Module $PSScriptRoot\..\..\ImportExcel.psd1 -Force
Describe "Tests Import-Excel Timings" -Tag Timing {
It "Should read the 20k xlsx in -le 2100 milliseconds" {
$timer = Measure-Command {
$data = Import-Excel $PSScriptRoot\TimingRows20k.xlsx
}
$timer.TotalMilliseconds | Should -BeLessOrEqual 2100
$data.Count | Should -Be 19999
}
}

View File

@@ -0,0 +1,66 @@
if (-not (Get-command Import-Excel -ErrorAction SilentlyContinue)) {
Import-Module $PSScriptRoot\..\ImportExcel.psd1
}
Describe "Test New Conditional Formatting IconSet" -Tag ConditionalFormattingIconSet {
BeforeEach {
$xlFilename = "TestDrive:\ConditionalFormattingIconSet.xlsx"
Remove-Item $xlFilename -ErrorAction SilentlyContinue
$data = ConvertFrom-Csv @"
Region,State,Other,Units,Price,InStock
West,Texas,1,927,923.71,1
North,Tennessee,3,466,770.67,0
East,Florida,0,1520,458.68,1
East,Maine,1,1828,661.24,0
West,Virginia,1,465,053.58,1
North,Missouri,1,436,235.67,1
South,Kansas,0,214,992.47,1
North,North Dakota,1,789,640.72,0
South,Delaware,-1,712,508.55,1
"@
}
It "Should set ThreeIconSet" {
# $cfi1 = New-ConditionalFormattingIconSet -Range C:C -ConditionalFormat ThreeIconSet -IconType Symbols -ShowIconOnly
$cfi1 = New-ConditionalFormattingIconSet -Range C:C -ConditionalFormat ThreeIconSet -IconType Symbols
$data | Export-Excel $xlFilename -ConditionalFormat $cfi1
$actual = Import-Excel $xlFilename
$actual.count | Should -Be 9
$xl = Open-ExcelPackage $xlFilename
$xl.Workbook.Worksheets.Count | Should -Be 1
$targetSheet = $xl.Workbook.Worksheets[1]
$targetSheet.Name | Should -Be "Sheet1"
$targetSheet.ConditionalFormatting.Count | Should -Be 1
$targetSheet.ConditionalFormatting[0].Type | Should -Be "ThreeIconSet"
$targetSheet.ConditionalFormatting[0].IconSet | Should -Be "Symbols"
$targetSheet.ConditionalFormatting[0].Reverse | Should -BeFalse
$targetSheet.ConditionalFormatting[0].ShowValue | Should -BeTrue
Close-ExcelPackage $xl -NoSave
}
It "Should set ThreeIconSet with ShowOnlyIcon" {
$cfi1 = New-ConditionalFormattingIconSet -Range C:C -ConditionalFormat ThreeIconSet -IconType Symbols -ShowIconOnly
$data | Export-Excel $xlFilename -ConditionalFormat $cfi1
$actual = Import-Excel $xlFilename
$actual.count | Should -Be 9
$xl = Open-ExcelPackage $xlFilename
$xl.Workbook.Worksheets.Count | Should -Be 1
$targetSheet = $xl.Workbook.Worksheets[1]
$targetSheet.Name | Should -Be "Sheet1"
$targetSheet.ConditionalFormatting.Count | Should -Be 1
$targetSheet.ConditionalFormatting[0].Type | Should -Be "ThreeIconSet"
$targetSheet.ConditionalFormatting[0].IconSet | Should -Be "Symbols"
$targetSheet.ConditionalFormatting[0].Reverse | Should -BeFalse
$targetSheet.ConditionalFormatting[0].ShowValue | Should -BeFalse
Close-ExcelPackage $xl -NoSave
}
}

View File

@@ -1,11 +1,12 @@
Describe "Test reading relative paths" { Describe "Test reading relative paths" {
BeforeAll { BeforeAll {
$script:xlfileName = "TestR.xlsx" $script:xlfileName = "TestR.xlsx"
@{data = 1 } | Export-Excel (Join-Path $PWD "TestR.xlsx") If ([String]::IsNullOrEmpty($PWD)) { $PWD = $PSScriptRoot }
@{data = 1 } | Export-Excel (Join-Path $PWD "TestR.xlsx")
} }
AfterAll { AfterAll {
Remove-Item (Join-Path $PWD "$($script:xlfileName)") Remove-Item (Join-Path $PWD "$($script:xlfileName)")
} }
It "Should read local file".PadRight(90) { It "Should read local file".PadRight(90) {

View File

@@ -0,0 +1,44 @@
if (-not (Get-command Import-Excel -ErrorAction SilentlyContinue)) {
Import-Module $PSScriptRoot\..\ImportExcel.psd1
}
Describe "Test setting comment on cells in different ways" -Tag SetCellComment {
BeforeAll {
$data = ConvertFrom-Csv @"
OrderId,Category,Sales,Quantity,Discount
1,Cosmetics,744.01,07,0.7
2,Grocery,349.13,25,0.3
3,Apparels,535.11,88,0.2
4,Electronics,524.69,60,0.1
5,Electronics,439.10,41,0.0
6,Apparels,56.84,54,0.8
7,Electronics,326.66,97,0.7
8,Cosmetics,17.25,74,0.6
9,Grocery,199.96,39,0.4
10,Grocery,731.77,20,0.3
"@
$Excel = $data | Export-Excel -PassThru
$ws = $Excel.Workbook.Worksheets | Select-Object -First 1
}
AfterAll {
Close-ExcelPackage $Excel
}
It "Should add comments to multiple cells".PadRight(87) {
Set-CellComment -Range "A1" -Worksheet $ws -Text "This was added with a single cell range"
Set-CellComment -Range "A2:C2" -Worksheet $ws -Text "This was added with a multiple cell range"
Set-CellComment -ColumnLetter A -Row 3 -Worksheet $ws -Text "This was added using a column letter and rownumber"
Set-CellComment -ColumnNumber 1 -Row 4 -Worksheet $ws -Text "This was added using a column number and row number"
Set-CellComment -Range "B2" -Worksheet $ws -Text "This demonstrates an overwrite of a previously set comment"
$ws.Cells["A1"].Comment.Text | Should -BeExactly "This was added with a single cell range"
$ws.Cells["A2"].Comment.Text | Should -BeExactly "This was added with a multiple cell range"
$ws.Cells["B2"].Comment.Text | Should -BeExactly "This demonstrates an overwrite of a previously set comment"
$ws.Cells["C2"].Comment.Text | Should -BeExactly "This was added with a multiple cell range"
$ws.Cells["A3"].Comment.Text | Should -BeExactly "This was added using a column letter and rownumber"
$ws.Cells["A4"].Comment.Text | Should -BeExactly "This was added using a column number and row number"
}
}

View File

@@ -132,6 +132,11 @@ Describe "Set-ExcelColumn, Set-ExcelRow and Set-ExcelRange" {
12011,Crowbar,7,23.48 12011,Crowbar,7,23.48
"@ "@
# Pester errors for countries with ',' as decimal separator
Foreach ($datarow in $data) {
$datarow.Price = [decimal]($datarow.Price)
}
$DriverData = convertFrom-CSv @" $DriverData = convertFrom-CSv @"
Name,Wikipage,DateOfBirth Name,Wikipage,DateOfBirth
Fernando Alonso,/wiki/Fernando_Alonso,1981-07-29 Fernando Alonso,/wiki/Fernando_Alonso,1981-07-29
@@ -392,7 +397,7 @@ Describe "Table Formatting" {
$excel = $data2 | Export-excel -path $path -WorksheetName Hardware -AutoNameRange -AutoSize -BoldTopRow -FreezeTopRow -PassThru $excel = $data2 | Export-excel -path $path -WorksheetName Hardware -AutoNameRange -AutoSize -BoldTopRow -FreezeTopRow -PassThru
$ws = $excel.Workbook.Worksheets[1] $ws = $excel.Workbook.Worksheets[1]
#test showfilter & TotalSettings #test showfilter & TotalSettings
$Table = Add-ExcelTable -PassThru -Range $ws.Cells[$($ws.Dimension.address)] -TableStyle Light1 -TableName HardwareTable -TotalSettings @{"Total" = "Sum"} -ShowFirstColumn -ShowFilter:$false $Table = Add-ExcelTable -PassThru -Range $ws.Cells[$($ws.Dimension.address)] -TableStyle Light1 -TableName HardwareTable -TableTotalSettings @{"Total" = "Sum"} -ShowFirstColumn -ShowFilter:$false
#test expnading named number formats #test expnading named number formats
Set-ExcelColumn -Worksheet $ws -Column 4 -NumberFormat 'Currency' Set-ExcelColumn -Worksheet $ws -Column 4 -NumberFormat 'Currency'
Set-ExcelColumn -Worksheet $ws -Column 5 -NumberFormat 'Currency' Set-ExcelColumn -Worksheet $ws -Column 5 -NumberFormat 'Currency'

View File

@@ -1,3 +1,15 @@
# 7.8.3
- Add -ShowOnlyIcon to `New-ConditionalFormattingIconSet` does not show data in the cell, just the icon. Based on this discussion https://github.com/dfinke/ImportExcel/discussions/1340
# 7.8.3
Thanks [Thomas Hofkens](https://github.com/thkn-hofa)
- Extended Export-Excel with parameter TableTotalSettings
- New Feature: Set-CellComment
- Fix Pester error for countries with ',' as decimal separator
- Fix Pester error for Windows PowerShell 5.1
# 7.8.2 # 7.8.2
- Fix docs [#1254](https://github.com/dfinke/ImportExcel/pull/1251)`Add-Worksheet` warning. Thank you [Wilson Stewart](https://github.com/WilsonStewart) - Fix docs [#1254](https://github.com/dfinke/ImportExcel/pull/1251)`Add-Worksheet` warning. Thank you [Wilson Stewart](https://github.com/WilsonStewart)

File diff suppressed because it is too large Load Diff

View File

@@ -112,7 +112,7 @@ An existing Sheet where the chart will be created.
```yaml ```yaml
Type: ExcelWorksheet Type: ExcelWorksheet
Parameter Sets: Workshet Parameter Sets: Worksheet
Aliases: Aliases:
Required: True Required: True

View File

@@ -14,7 +14,7 @@ Adds Tables to Excel workbooks.
## SYNTAX ## SYNTAX
```text ```text
Add-ExcelTable [-Range] <ExcelRange> [[-TableName] <String>] [[-TableStyle] <TableStyles>] [-ShowHeader] [-ShowFilter] [-ShowTotal] [[-TotalSettings] <Hashtable>] [-ShowFirstColumn] [-ShowLastColumn] [-ShowRowStripes] [-ShowColumnStripes] [-PassThru] [<CommonParameters>] Add-ExcelTable [-Range] <ExcelRange> [[-TableName] <String>] [[-TableStyle] <TableStyles>] [-ShowHeader] [-ShowFilter] [-ShowTotal] [[-TableTotalSettings] <Hashtable>] [-ShowFirstColumn] [-ShowLastColumn] [-ShowRowStripes] [-ShowColumnStripes] [-PassThru] [<CommonParameters>]
``` ```
## DESCRIPTION ## DESCRIPTION
@@ -142,9 +142,19 @@ Accept pipeline input: False
Accept wildcard characters: False Accept wildcard characters: False
``` ```
### -TotalSettings ### -TableTotalSettings
A HashTable in the form ColumnName = "Average"\|"Count"\|"CountNums"\|"Max"\|"Min"\|"None"\|"StdDev"\|"Sum"\|"Var" - if specified, -ShowTotal is not needed. A HashTable in the form of either
- ColumnName = "Average"\|"Count"\|"CountNums"\|"Max"\|"Min"\|"None"\|"StdDev"\|"Sum"\|"Var"|\<Custom Excel function starting with "="\>
- ```powershell
ColumnName = @{
Function = "Average"\|"Count"\|"CountNums"\|"Max"\|"Min"\|"None"\|"StdDev"\|"Sum"\|"Var"|<Custom Excel function starting with "=">
Comment = $HoverComment
}
```
if specified, -ShowTotal is not needed.
```yaml ```yaml
Type: Hashtable Type: Hashtable

View File

@@ -16,13 +16,13 @@ Exports data to an Excel worksheet.
### Default \(Default\) ### Default \(Default\)
```text ```text
Export-Excel [[-Path] <String>] [-InputObject <Object>] [-Calculate] [-Show] [-WorksheetName <String>] [-Password <String>] [-ClearSheet] [-Append] [-Title <String>] [-TitleFillPattern <ExcelFillStyle>] [-TitleBold] [-TitleSize <Int32>] [-TitleBackgroundColor <Object>][-IncludePivotTable] [-PivotTableName <String>] [-PivotRows <String[]> [-PivotColumns <String[]>] [-PivotData <Object>] [-PivotFilter <String[]>] [-PivotDataToColumn] [-PivotTableDefinition <Hashtable>] [-IncludePivotChart] [-ChartType <eChartType>] [-NoLegend] [-ShowCategory] [-ShowPercent] [-AutoSize] [-MaxAutoSizeRows <Object>] [-NoClobber] [-FreezeTopRow] [-FreezeFirstColumn] [-FreezeTopRowFirstColumn] [-FreezePane <Int32[]>] [-AutoFilter] [-BoldTopRow] [-NoHeader] [-RangeName <String>] [-TableName <Object>] [-TableStyle <TableStyles>] [-Barchart] [-PieChart] [-LineChart] [-ColumnChart] [-ExcelChartDefinition <Object[]>] [-HideSheet <String[]>] [-UnHideSheet <String[]>] [-MoveToStart] [-MoveToEnd] [-MoveBefore <Object>] [-MoveAfter <Object>] [-KillExcel] [-AutoNameRange] [-StartRow <Int32>] [-StartColumn <Int32>] [-PassThru] [-Numberformat <String>] [-ExcludeProperty <String[]>] [-NoAliasOrScriptPropeties] [-DisplayPropertySet] [-NoNumberConversion <String[]>] [-ConditionalFormat <Object[]>] [-ConditionalText <Object[]>] [-Style <Object[]>] [-CellStyleSB <ScriptBlock>] [-Activate] [-Now] [-ReturnRange] [-PivotTotals <String>] [-NoTotalsInPivot] [-ReZip] [<CommonParameters>] Export-Excel [[-Path] <String>] [-InputObject <Object>] [-Calculate] [-Show] [-WorksheetName <String>] [-Password <String>] [-ClearSheet] [-Append] [-Title <String>] [-TitleFillPattern <ExcelFillStyle>] [-TitleBold] [-TitleSize <Int32>] [-TitleBackgroundColor <Object>][-IncludePivotTable] [-PivotTableName <String>] [-PivotRows <String[]> [-PivotColumns <String[]>] [-PivotData <Object>] [-PivotFilter <String[]>] [-PivotDataToColumn] [-PivotTableDefinition <Hashtable>] [-IncludePivotChart] [-ChartType <eChartType>] [-NoLegend] [-ShowCategory] [-ShowPercent] [-AutoSize] [-MaxAutoSizeRows <Object>] [-NoClobber] [-FreezeTopRow] [-FreezeFirstColumn] [-FreezeTopRowFirstColumn] [-FreezePane <Int32[]>] [-AutoFilter] [-BoldTopRow] [-NoHeader] [-RangeName <String>] [-TableName <Object>] [-TableStyle <TableStyles>] [-TableTotalSettings <HashTable>] [-Barchart] [-PieChart] [-LineChart] [-ColumnChart] [-ExcelChartDefinition <Object[]>] [-HideSheet <String[]>] [-UnHideSheet <String[]>] [-MoveToStart] [-MoveToEnd] [-MoveBefore <Object>] [-MoveAfter <Object>] [-KillExcel] [-AutoNameRange] [-StartRow <Int32>] [-StartColumn <Int32>] [-PassThru] [-Numberformat <String>] [-ExcludeProperty <String[]>] [-NoAliasOrScriptPropeties] [-DisplayPropertySet] [-NoNumberConversion <String[]>] [-ConditionalFormat <Object[]>] [-ConditionalText <Object[]>] [-Style <Object[]>] [-CellStyleSB <ScriptBlock>] [-Activate] [-Now] [-ReturnRange] [-PivotTotals <String>] [-NoTotalsInPivot] [-ReZip] [<CommonParameters>]
``` ```
### Package ### Package
```text ```text
Export-Excel -ExcelPackage <ExcelPackage> [-InputObject <Object>] [-Calculate] [-Show] [-WorksheetName <String>] [-Password <String>] [-ClearSheet] [-Append] [-Title <String>] [-TitleFillPattern <ExcelFillStyle>] [-TitleBold] [-TitleSize <Int32>] [-TitleBackgroundColor <Object>] [-IncludePivotTable] [-PivotTableName <String>] [-PivotRows <String[]>] [-PivotColumns <String[]>] [-PivotData <Object>] [-PivotFilter <String[]>] [-PivotDataToColumn] [-PivotTableDefinition <Hashtable>] [-IncludePivotChart] [-ChartType <eChartType>] [-NoLegend] [-ShowCategory] [-ShowPercent] [-AutoSize] [-MaxAutoSizeRows <Object>] [-NoClobber] [-FreezeTopRow] [-FreezeFirstColumn] [-FreezeTopRowFirstColumn] [-FreezePane <Int32[]>] [-AutoFilter] [-BoldTopRow] [-NoHeader] [-RangeName <String>] [-TableName <Object>] [-TableStyle <TableStyles>] [-Barchart] [-PieChart] [-LineChart] [-ColumnChart] [-ExcelChartDefinition <Object[]>] [-HideSheet <String[]>] [-UnHideSheet <String[]>] [-MoveToStart] [-MoveToEnd] [-MoveBefore <Object>] [-MoveAfter <Object>] [-KillExcel] [-AutoNameRange] [-StartRow <Int32>] [-StartColumn <Int32>] [-PassThru] [-Numberformat <String>] [-ExcludeProperty <String[]>] Export-Excel -ExcelPackage <ExcelPackage> [-InputObject <Object>] [-Calculate] [-Show] [-WorksheetName <String>] [-Password <String>] [-ClearSheet] [-Append] [-Title <String>] [-TitleFillPattern <ExcelFillStyle>] [-TitleBold] [-TitleSize <Int32>] [-TitleBackgroundColor <Object>] [-IncludePivotTable] [-PivotTableName <String>] [-PivotRows <String[]>] [-PivotColumns <String[]>] [-PivotData <Object>] [-PivotFilter <String[]>] [-PivotDataToColumn] [-PivotTableDefinition <Hashtable>] [-IncludePivotChart] [-ChartType <eChartType>] [-NoLegend] [-ShowCategory] [-ShowPercent] [-AutoSize] [-MaxAutoSizeRows <Object>] [-NoClobber] [-FreezeTopRow] [-FreezeFirstColumn] [-FreezeTopRowFirstColumn] [-FreezePane <Int32[]>] [-AutoFilter] [-BoldTopRow] [-NoHeader] [-RangeName <String>] [-TableName <Object>] [-TableStyle <TableStyles>] [-TableTotalSettings <HashTable>] [-Barchart] [-PieChart] [-LineChart] [-ColumnChart] [-ExcelChartDefinition <Object[]>] [-HideSheet <String[]>] [-UnHideSheet <String[]>] [-MoveToStart] [-MoveToEnd] [-MoveBefore <Object>] [-MoveAfter <Object>] [-KillExcel] [-AutoNameRange] [-StartRow <Int32>] [-StartColumn <Int32>] [-PassThru] [-Numberformat <String>] [-ExcludeProperty <String[]>]
[-NoAliasOrScriptPropeties] [-DisplayPropertySet] [-NoNumberConversion <String[]>] [-ConditionalFormat <Object[]>] [-ConditionalText <Object[]>] [-Style <Object[]>] [-CellStyleSB <ScriptBlock>] [-Activate] [-ReturnRange] [-PivotTotals <String>] [-NoTotalsInPivot] [-ReZip] [<CommonParameters>] [-NoAliasOrScriptPropeties] [-DisplayPropertySet] [-NoNumberConversion <String[]>] [-ConditionalFormat <Object[]>] [-ConditionalText <Object[]>] [-Style <Object[]>] [-CellStyleSB <ScriptBlock>] [-Activate] [-ReturnRange] [-PivotTotals <String>] [-NoTotalsInPivot] [-ReZip] [<CommonParameters>]
``` ```
@@ -156,6 +156,29 @@ If neither condition is met, the color will be the default, black text on a whit
### EXAMPLE 7 ### EXAMPLE 7
```text
PS\> $r = Get-ChildItem C:\WINDOWS\system32 -File
PS\> $TotalSettings = @{
Name = "Count"
Extension = "=COUNTIF([Extension];`".exe`")"
Length = @{
Function = "=SUMIF([Extension];`".exe`";[Length])"
Comment = "Sum of all exe sizes"
}
}
PS\> $r | Export-Excel -TableName system32files -TableStyle Medium10 -TableTotalSettings $TotalSettings -Show
```
Exports a list of files with a totals row with three calculated totals:
- Total count of names
- Count of files with the extension ".exe"
- Total size of all file with extension ".exe" and add a comment as to not be mistaken that is is the total size of all files
### EXAMPLE 8
```text ```text
PS\> $ExcelParams = @{ PS\> $ExcelParams = @{
Path = $env:TEMP + '\Excel.xlsx' Path = $env:TEMP + '\Excel.xlsx'
@@ -189,25 +212,25 @@ PS\> $Array | Update-FirstObjectProperties | Export-Excel @ExcelParams -Workshee
Updates the first object of the array by adding property 'Member3' and 'Member4'. Afterwards, all objects are exported to an Excel file and all column headers are visible. Updates the first object of the array by adding property 'Member3' and 'Member4'. Afterwards, all objects are exported to an Excel file and all column headers are visible.
### EXAMPLE 8 ### EXAMPLE 9
```text ```text
PS\> Get-Process | Export-Excel .\test.xlsx -WorksheetName Processes -IncludePivotTable -Show -PivotRows Company -PivotData PM PS\> Get-Process | Export-Excel .\test.xlsx -WorksheetName Processes -IncludePivotTable -Show -PivotRows Company -PivotData PM
``` ```
### EXAMPLE 9 ### EXAMPLE 10
```text ```text
PS\> Get-Process | Export-Excel .\test.xlsx -WorksheetName Processes -ChartType PieExploded3D -IncludePivotChart -IncludePivotTable -Show -PivotRows Company -PivotData PM PS\> Get-Process | Export-Excel .\test.xlsx -WorksheetName Processes -ChartType PieExploded3D -IncludePivotChart -IncludePivotTable -Show -PivotRows Company -PivotData PM
``` ```
### EXAMPLE 10 ### EXAMPLE 11
```text ```text
PS\> Get-Service | Export-Excel 'c:\temp\test.xlsx' -Show -IncludePivotTable -PivotRows status -PivotData @{status='count'} PS\> Get-Service | Export-Excel 'c:\temp\test.xlsx' -Show -IncludePivotTable -PivotRows status -PivotData @{status='count'}
``` ```
### EXAMPLE 11 ### EXAMPLE 12
```text ```text
PS\> $pt = [ordered]@{} PS\> $pt = [ordered]@{}
@@ -237,7 +260,7 @@ Then it puts Service data on Sheet1 with one call to Export-Excel and Process Da
The third and final call adds the two PivotTables and opens the spreadsheet in Excel. The third and final call adds the two PivotTables and opens the spreadsheet in Excel.
### EXAMPLE 12 ### EXAMPLE 13
```text ```text
PS\> Remove-Item -Path .\test.xlsx PS\> Remove-Item -Path .\test.xlsx
@@ -258,7 +281,7 @@ It then uses the package object to apply formatting, and then saves the workbook
Note: Other commands in the module remove the need to work directly with the package object in this way. Note: Other commands in the module remove the need to work directly with the package object in this way.
### EXAMPLE 13 ### EXAMPLE 14
```text ```text
PS\> Remove-Item -Path .\test.xlsx -ErrorAction Ignore PS\> Remove-Item -Path .\test.xlsx -ErrorAction Ignore
@@ -281,7 +304,7 @@ This a more sophisticated version of the previous example showing different ways
In the final command a PivotChart is added and the workbook is opened in Excel. In the final command a PivotChart is added and the workbook is opened in Excel.
### EXAMPLE 14 ### EXAMPLE 15
```text ```text
PS\> 0..360 | ForEach-Object {[pscustomobject][ordered]@{X=$_; Sinx="=Sin(Radians(x)) "} } | PS\> 0..360 | ForEach-Object {[pscustomobject][ordered]@{X=$_; Sinx="=Sin(Radians(x)) "} } |
@@ -290,7 +313,7 @@ PS\> 0..360 | ForEach-Object {[pscustomobject][ordered]@{X=$_; Sinx="=Sin(Radian
Creates a line chart showing the value of Sine\(x\) for values of X between 0 and 360 degrees. Creates a line chart showing the value of Sine\(x\) for values of X between 0 and 360 degrees.
### EXAMPLE 15 ### EXAMPLE 16
```text ```text
PS\> Invoke-Sqlcmd -ServerInstance localhost\DEFAULT -Database AdventureWorks2014 -Query "select * from sys.tables" -OutputAs DataRows | PS\> Invoke-Sqlcmd -ServerInstance localhost\DEFAULT -Database AdventureWorks2014 -Query "select * from sys.tables" -OutputAs DataRows |
@@ -337,7 +360,7 @@ Accept wildcard characters: False
### -InputObject ### -InputObject
Date is usually piped into Export-Excel, but it also accepts data through the InputObject parameter Data is usually piped into Export-Excel, but it also accepts data through the InputObject parameter
```yaml ```yaml
Type: Object Type: Object
@@ -952,6 +975,32 @@ Accept pipeline input: False
Accept wildcard characters: False Accept wildcard characters: False
``` ```
### -TableTotalSettings
A HashTable in the form of either
- ColumnName = "Average"\|"Count"\|"CountNums"\|"Max"\|"Min"\|"None"\|"StdDev"\|"Sum"\|"Var"|\<Custom Excel function starting with "="\>
- ```powershell
ColumnName = @{
Function = "Average"\|"Count"\|"CountNums"\|"Max"\|"Min"\|"None"\|"StdDev"\|"Sum"\|"Var"|<Custom Excel function starting with "=">
Comment = $HoverComment
}
```
if specified, -ShowTotal is not needed.
```yaml
Type: Hashtable
Parameter Sets: (All)
Aliases:
Required: False
Position: 4
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -Barchart ### -Barchart
Creates a "quick" bar chart using the first text column as labels and the first numeric column as values. Creates a "quick" bar chart using the first text column as labels and the first numeric column as values.

View File

@@ -64,6 +64,7 @@ If the default behavior is not desired and you want to import the complete works
### EXAMPLE 1 ### EXAMPLE 1
```text ```text
---------------------------------------------- ----------------------------------------------
| File: Movies.xlsx - Sheet: Actors | | File: Movies.xlsx - Sheet: Actors |
---------------------------------------------- ----------------------------------------------
@@ -89,6 +90,7 @@ Notice that column 'B' is not imported because there's no value in cell 'B1' tha
### EXAMPLE 2 ### EXAMPLE 2
```text ```text
---------------------------------------------- ----------------------------------------------
| File: Movies.xlsx - Sheet: Actors | | File: Movies.xlsx - Sheet: Actors |
---------------------------------------------- ----------------------------------------------
@@ -120,6 +122,7 @@ Notice that the column header \(row 1\) is imported as an object too.
### EXAMPLE 3 ### EXAMPLE 3
```text ```text
---------------------------------------------------------- ----------------------------------------------------------
| File: Movies.xlsx - Sheet: Movies | | File: Movies.xlsx - Sheet: Movies |
---------------------------------------------------------- ----------------------------------------------------------
@@ -160,6 +163,7 @@ Notice that empty rows are imported and that data for the property 'Genre' is no
### EXAMPLE 4 ### EXAMPLE 4
```text ```text
---------------------------------------------------------- ----------------------------------------------------------
| File: Movies.xlsx - Sheet: Movies | | File: Movies.xlsx - Sheet: Movies |
---------------------------------------------------------- ----------------------------------------------------------
@@ -192,6 +196,7 @@ Notice that empty rows and empty columns are not imported.
### EXAMPLE 5 ### EXAMPLE 5
```text ```text
---------------------------------------------------------- ----------------------------------------------------------
| File: Movies.xlsx - Sheet: Actors | | File: Movies.xlsx - Sheet: Actors |
---------------------------------------------------------- ----------------------------------------------------------