mirror of
https://github.com/dfinke/ImportExcel.git
synced 2025-12-12 14:23:14 +00:00
Compare commits
29 Commits
Fix-Import
...
DoNotShowV
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c23a064bc | ||
|
|
c848497f53 | ||
|
|
ba374ec558 | ||
|
|
3f772ce726 | ||
|
|
3ea6fde928 | ||
|
|
81ece62494 | ||
|
|
828b2caf9f | ||
|
|
f760b63818 | ||
|
|
fe016f732d | ||
|
|
c719cc3d32 | ||
|
|
5558f48732 | ||
|
|
4dfd211bb6 | ||
|
|
90bc047267 | ||
|
|
4c0e7970cf | ||
|
|
b191f16e3e | ||
|
|
ce49038b75 | ||
|
|
652a611137 | ||
|
|
3b73ce24ae | ||
|
|
5e8afa48fc | ||
|
|
f494635b48 | ||
|
|
dcb67b4518 | ||
|
|
06c00cb0b2 | ||
|
|
d987437ad6 | ||
|
|
fe27ff81c8 | ||
|
|
9f4307f6c0 | ||
|
|
a1fccf914f | ||
|
|
0b4c2b81db | ||
|
|
8ee34217a4 | ||
|
|
c01601910d |
@@ -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
|
||||||
29
Examples/Tables/SalesData-WithTotalRow.ps1
Normal file
29
Examples/Tables/SalesData-WithTotalRow.ps1
Normal 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
|
||||||
16
Examples/Tables/TotalsRow.ps1
Normal file
16
Examples/Tables/TotalsRow.ps1
Normal 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
|
||||||
@@ -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',
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
70
Public/Set-CellComment.ps1
Normal file
70
Public/Set-CellComment.ps1
Normal 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() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
66
__tests__/New-ConditionalFormattingIconSet.tests.ps1
Normal file
66
__tests__/New-ConditionalFormattingIconSet.tests.ps1
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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) {
|
||||||
|
|||||||
44
__tests__/Set-CellComment.tests.ps1
Normal file
44
__tests__/Set-CellComment.tests.ps1
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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'
|
||||||
|
|||||||
12
changelog.md
12
changelog.md
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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 |
|
||||||
----------------------------------------------------------
|
----------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user