Compare commits

..

63 Commits

Author SHA1 Message Date
Doug Finke
e486135c4f Merge pull request #1029 from MikeyBronowski/patch-2
Removed duplicate entry for the version
2021-05-08 19:05:55 -04:00
Mikey Bronowski
80d9cb1290 Removed duplicate entry for the version
The What's new for 7.1.2 starts at line 58
2021-05-08 23:43:42 +01:00
dfinke
d82c01eabf Updated readme #1014 2021-04-06 20:22:55 -04:00
dfinke
2fcb7a57a2 tweak tests for path returned #1014 2021-04-06 19:37:07 -04:00
dfinke
afe7e545f6 Add unit tests for Get-ExcelFileSummary #1014 2021-04-06 19:32:37 -04:00
dfinke
88638a87a9 Added Get-ExcelFileSummary 2021-02-28 15:59:42 -05:00
Doug Finke
0f354be443 Merge pull request #998 from DarkLite1/master
Added example for exporting data to Excel for Pester 5.1
2021-02-12 09:54:32 -05:00
DarkLite1
abebb9af11 Added example for exporting data to Excel for Pester 5.1 2021-02-12 13:21:59 +01:00
dfinke
d8ae8b1abc change to testdrive 2021-02-07 11:19:43 -05:00
dfinke
30fc53857d Swapped out Get-CimInstance tests 2021-02-07 11:14:08 -05:00
dfinke
04b7895d1e Remove .gitbook 2020-11-28 11:41:44 -05:00
Doug Finke
7f72aa9e86 GitBook: [master] 133 pages and 8 assets modified 2020-11-28 13:13:00 +00:00
Doug Finke
70ab9e46c7 Merge pull request #959 from MikeyBronowski/ExampleDatabar
Example: Removed a duplicate parameter Range/Address
2020-11-27 12:47:24 -05:00
MikeyBronowski
49e355b702 Removed a duplicate parameter Range/Address 2020-11-24 22:24:40 +00:00
Doug Finke
82a8536e47 Merge pull request #954 from jhoneill/master
Fixed the pester issues. (Locally and in AzDo pipelines)
2020-11-23 18:38:51 -05:00
dfinke
35246d51e7 Remove -MaximumVersion 4.99.99 2020-11-23 18:33:17 -05:00
jhoneill
9dafe170f1 Suppress bogus analyzer warnings. 2020-11-23 09:34:14 +00:00
jhoneill
0d29fd813d Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2020-11-23 09:27:54 +00:00
jhoneill
c685ad767c More pester fixing 2020-11-23 09:27:14 +00:00
jhoneill
f283ada708 More pester fixing 2020-11-23 09:12:50 +00:00
jhoneill
bb3923aabf Merge remote-tracking branch 'upstream/master' 2020-11-23 00:43:11 +00:00
Doug Finke
fa0b3ca79b Update Multiplecharts.md 2020-11-13 18:52:53 -05:00
Doug Finke
53f8acda90 Update Multiplecharts.md 2020-11-13 18:50:27 -05:00
Doug Finke
ca586fc2d5 Update Multiplecharts.md 2020-11-13 18:50:14 -05:00
Doug Finke
4c5f1a967e Update Multiplecharts.md 2020-11-13 18:49:58 -05:00
dfinke
f237861e1a added md and png 2020-11-13 18:49:14 -05:00
jhoneill
282d650072 De-skipped some tests. Fixed a tiny bug in Add-Conditional formatting. 2020-11-02 18:01:23 +00:00
dfinke
6149442bc0 First pass. All code must be in a script block 2020-10-31 17:47:07 -04:00
Doug Finke
113bf2c95c Merge pull request #908 from SQLvariant/small-typo
Update ImportExcel-help.xml
2020-08-28 09:11:45 -04:00
Aaron Nelson
27e8130e6c Update ImportExcel-help.xml
Corrected the location of the period.
2020-08-28 08:07:41 -04:00
Doug Finke
c19e219a44 Update README.md 2020-07-11 18:38:54 -04:00
dfinke
795b2017b5 Update readme 2020-07-11 18:20:50 -04:00
Doug Finke
cb749dff07 Merge pull request #835 from scrthq:hotfix/issue_832
fixes #832
2020-07-11 17:49:54 -04:00
dfinke
fd6b847d77 update readme 2020-07-03 12:11:59 -04:00
dfinke
c6d9104d52 Merge branch 'master' of https://github.com/dfinke/ImportExcel 2020-07-03 12:10:34 -04:00
Doug Finke
df157b22ab Merge pull request #885 from MikeyBronowski/Examples1
Standardise examples: loading module + file cleanup
2020-07-03 11:39:52 -04:00
MikeyBronowski
95822ac2e9 Standardise file cleanup 2020-07-01 22:19:42 +02:00
MikeyBronowski
c4d20a9a28 Standardise file cleanup 2020-07-01 22:10:00 +02:00
MikeyBronowski
8a20963577 Standardising examples 2020-07-01 22:04:37 +02:00
dfinke
c30e03a47f updated 2020-06-26 19:38:55 -04:00
Doug Finke
0a77a83e35 Merge pull request #875 from MikeyBronowski/VariableCasing
Variable casing
2020-06-26 19:30:00 -04:00
MikeyBronowski
66f6a5fa0b typo 2020-06-21 22:53:35 +02:00
MikeyBronowski
a3921f5298 Parameters with casing not following standard 2020-06-21 22:34:46 +02:00
dfinke
1823f1dde0 updated readme 2020-06-20 17:44:46 -04:00
Doug Finke
5d5ca57f4b Merge pull request #873 from MikeyBronowski:VariableCasing
Standardising casing of parameter names
2020-06-20 17:36:27 -04:00
MikeyBronowski
11d591aad6 Standardising casing of parameter names 2020-06-20 23:03:27 +02:00
dfinke
9841ef9436 delete appveyor.yml, update badges in readme 2020-05-24 12:23:22 -04:00
dfinke
ae1fa04334 stop appveyor builds 2020-05-24 12:14:41 -04:00
dfinke
a7861ee57d bump version, update readme 2020-05-24 11:50:19 -04:00
Doug Finke
24ca7a4d86 Merge pull request #856 from dfinke/dfinke/issue855
Dfinke/issue855
2020-05-24 11:20:52 -04:00
dfinke
51b23323fa Scrub invalid chars from the filename 2020-05-24 10:59:57 -04:00
dfinke
001aabf526 Added synopsis, and tests the value is a scriptblock 2020-05-23 17:32:22 -04:00
dfinke
a5a98d5c92 Used to drive the Export-MultipleExcelSheets 2020-05-23 17:32:03 -04:00
dfinke
070d40b5af Move to Examples/Experimental 2020-05-23 17:10:54 -04:00
dfinke
c4b3556c5d Don't source the Export-Multiplesheets ps1 2020-05-23 17:06:45 -04:00
dfinke
8151ed4305 Remove help file 2020-05-23 17:06:12 -04:00
Nate Ferrell
6959cffa24 added ImportOnly test and added additional macOS stage on azure-pipelines.yml 2020-05-05 02:22:53 -05:00
Nate Ferrell
6be2195680 Merge remote-tracking branch 'upstream/master' into hotfix/issue_832 2020-05-05 02:21:00 -05:00
Doug Finke
ff77606430 Merge pull request #837 from dfinke/UpdatePesterInstall
Prevent install of Pester v5
2020-05-04 18:52:27 -04:00
dfinke
a874e1385e Prevent install of Pester v5 2020-05-04 09:43:19 -04:00
dfinke
f8b9cf7251 Add Stale bot config 2020-05-03 14:58:02 -04:00
dfinke
5588c0306c added custom formatting example 2020-05-02 16:47:36 -04:00
Nate Ferrell
359f7453c5 fixes #832 2020-05-01 13:34:46 -05:00
191 changed files with 32196 additions and 3075 deletions

17
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,17 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 30
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

1
.gitignore vendored
View File

@@ -65,3 +65,4 @@ ImportExcel.zip
~$* ~$*
# InstallModule.ps1 # InstallModule.ps1
# PublishToGallery.ps1 # PublishToGallery.ps1
.vscode/*

View File

@@ -13,7 +13,10 @@ param
# AppVeyor and Azure - Upload module as AppVeyor Artifact. # AppVeyor and Azure - Upload module as AppVeyor Artifact.
[Switch]$Artifact, [Switch]$Artifact,
# Azure - Runs PsScriptAnalyzer against one or more folders and pivots the results to form a report. # Azure - Runs PsScriptAnalyzer against one or more folders and pivots the results to form a report.
[Switch]$Analyzer [Switch]$Analyzer,
# Installs the module and invokes only the ModuleImport test.
# Used for validating that the module imports still when external dependencies are missing, e.g. mono-libgdiplus on macOS.
[Switch]$TestImportOnly
) )
$ErrorActionPreference = 'Stop' $ErrorActionPreference = 'Stop'
if ($Initialize) { if ($Initialize) {
@@ -21,7 +24,7 @@ if ($Initialize) {
$ModuleVersion = (. ([Scriptblock]::Create((Get-Content -Path $Psd1 | Out-String)))).ModuleVersion $ModuleVersion = (. ([Scriptblock]::Create((Get-Content -Path $Psd1 | Out-String)))).ModuleVersion
Update-AppveyorBuild -Version "$ModuleVersion ($env:APPVEYOR_BUILD_NUMBER) $env:APPVEYOR_REPO_BRANCH" Update-AppveyorBuild -Version "$ModuleVersion ($env:APPVEYOR_BUILD_NUMBER) $env:APPVEYOR_REPO_BRANCH"
} }
if ($Test) { if ($Test -or $TestImportOnly) {
function Get-EnvironmentInfo { function Get-EnvironmentInfo {
if ([environment]::OSVersion.Platform -like "win*") { if ([environment]::OSVersion.Platform -like "win*") {
# Get Windows Version # Get Windows Version
@@ -97,7 +100,23 @@ if (-not $VersionFilePath) {
'[Progress] Installing Module.' '[Progress] Installing Module.'
. .\CI\Install.ps1 . .\CI\Install.ps1
'[Progress] Invoking Pester.' '[Progress] Invoking Pester.'
Invoke-Pester -OutputFile ('TestResultsPS{0}.xml' -f $PSVersionTable.PSVersion) $pesterParams = @{
OutputFile = ('TestResultsPS{0}.xml' -f $PSVersionTable.PSVersion)
PassThru = $true
}
if ($TestImportOnly) {
$pesterParams['Tag'] = 'TestImportOnly'
}
else {
$pesterParams['ExcludeTag'] = 'TestImportOnly'
}
$testResults = Invoke-Pester @pesterParams
'Pester invocation complete!'
if ($testResults.FailedCount -gt 0) {
"Test failures:"
$testResults.TestResult | Where-Object {-not $_.Passed} | Format-List
Write-Error "$($testResults.FailedCount) Pester tests failed. Build cannot continue!"
}
} }
if ($Finalize) { if ($Finalize) {
'[Progress] Finalizing.' '[Progress] Finalizing.'
@@ -131,6 +150,7 @@ if ($Artifact) {
"[Progress] Artifact Start for Module: $ModuleName, Version: $VersionLocal." "[Progress] Artifact Start for Module: $ModuleName, Version: $VersionLocal."
if ($env:APPVEYOR) { if ($env:APPVEYOR) {
$ZipFileName = "{0} {1} {2} {3:yyyy-MM-dd HH-mm-ss}.zip" -f $ModuleName, $VersionLocal, $env:APPVEYOR_REPO_BRANCH, (Get-Date) $ZipFileName = "{0} {1} {2} {3:yyyy-MM-dd HH-mm-ss}.zip" -f $ModuleName, $VersionLocal, $env:APPVEYOR_REPO_BRANCH, (Get-Date)
$ZipFileName = $ZipFileName -replace ("[{0}]" -f [RegEx]::Escape([IO.Path]::GetInvalidFileNameChars() -join ''))
$ZipFileFullPath = Join-Path -Path $PSScriptRoot -ChildPath $ZipFileName $ZipFileFullPath = Join-Path -Path $PSScriptRoot -ChildPath $ZipFileName
"[Info] Artifact. $ModuleName, ZipFileName: $ZipFileName." "[Info] Artifact. $ModuleName, ZipFileName: $ZipFileName."
#Compress-Archive -Path $ModulePath -DestinationPath $ZipFileFullPath #Compress-Archive -Path $ModulePath -DestinationPath $ZipFileFullPath

View File

@@ -225,7 +225,9 @@ if (-not $SkipPostChecks) {
PivotData = @{RuleName = 'Count' } PivotData = @{RuleName = 'Count' }
PivotRows = 'Severity', 'RuleName' PivotRows = 'Severity', 'RuleName'
PivotTotals = 'Rows' PivotTotals = 'Rows'
PivotChartDefinition = $chartDef }} PivotChartDefinition = $chartDef
}
}
} }
Remove-Item -Path $ExcelParams['Path'] -ErrorAction SilentlyContinue Remove-Item -Path $ExcelParams['Path'] -ErrorAction SilentlyContinue
$AnalyzerResults | Export-Excel @ExcelParams $AnalyzerResults | Export-Excel @ExcelParams
@@ -245,11 +247,20 @@ if (Test-Path $script:warningfile) {
if (-not $SkipPesterTests -and (Get-ChildItem -Recurse *.tests.ps1)) { if (-not $SkipPesterTests -and (Get-ChildItem -Recurse *.tests.ps1)) {
Import-Module -Force $outputFile Import-Module -Force $outputFile
if (-not (Get-Module -ListAvailable pester | Where-Object -Property version -ge ([version]::new(4, 4, 1)))) { if (-not (Get-Module -ListAvailable pester | Where-Object -Property version -ge ([version]::new(4, 4, 1)))) {
Install-Module Pester -Force -SkipPublisherCheck Install-Module Pester -Force -SkipPublisherCheck -MaximumVersion 4.99.99
} }
Import-Module Pester $pester = Import-Module Pester -PassThru
$PesterOutputPath = Join-Path $pwd -ChildPath ('TestResultsPS{0}.xml' -f $PSVersionTable.PSVersion) $pester
$pesterOutputPath = Join-Path $pwd -ChildPath ('TestResultsPS{0}.xml' -f $PSVersionTable.PSVersion)
if ($PSScriptRoot) { Pop-Location } if ($PSScriptRoot) { Pop-Location }
Invoke-Pester -OutputFile $PesterOutputPath if ($pester.Version.Major -lt 5) {Invoke-Pester -OutputFile $pesterOutputPath}
else {
$pesterArgs = [PesterConfiguration]::Default
$pesterArgs.Run.Exit = $true
$pesterArgs.Output.Verbosity = "Normal"
$pesterArgs.TestResult.Enabled = $true
$pesterArgs.TestResult.OutputPath = $pesterOutputPath
Invoke-Pester -Configuration $pesterArgs
}
} }
elseif ($PSScriptRoot) { Pop-Location } elseif ($PSScriptRoot) { Pop-Location }

View File

@@ -1,8 +1,8 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$xlSourcefile = "$env:TEMP\Source.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile" Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore Remove-Item $xlSourcefile -ErrorAction Ignore
#Put some simple data in a worksheet and Get an excel package object to represent the file #Put some simple data in a worksheet and Get an excel package object to represent the file

View File

@@ -1,7 +1,8 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$xlSourcefile = "$env:TEMP\Source.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore Remove-Item $xlSourcefile -ErrorAction Ignore
#Put some simple data in a worksheet and Get an excel package object to represent the file #Put some simple data in a worksheet and Get an excel package object to represent the file

View File

@@ -1,7 +1,10 @@
# Creates a worksheet, addes a chart and then a Linear trendline # Creates a worksheet, addes a chart and then a Linear trendline
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$xlfile = "$env:TEMP\trendLine.xlsx" #Get rid of pre-exisiting sheet
Remove-Item $xlfile -ErrorAction SilentlyContinue $xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-Csv @" $data = ConvertFrom-Csv @"
Region,Item,TotalSold Region,Item,TotalSold
@@ -18,4 +21,4 @@ South,avocado,73
"@ "@
$cd = New-ExcelChartDefinition -XRange Region -YRange TotalSold -ChartType ColumnClustered -ChartTrendLine Linear $cd = New-ExcelChartDefinition -XRange Region -YRange TotalSold -ChartType ColumnClustered -ChartTrendLine Linear
$data | Export-Excel $xlfile -ExcelChartDefinition $cd -AutoNameRange -Show $data | Export-Excel $xlSourcefile -ExcelChartDefinition $cd -AutoNameRange -Show

View File

@@ -1,6 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item temp.xlsx -ErrorAction Ignore #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = Invoke-Sum -data (Get-Process) -dimension Company -measure Handles, PM, VirtualMemorySize $data = Invoke-Sum -data (Get-Process) -dimension Company -measure Handles, PM, VirtualMemorySize
@@ -11,4 +14,4 @@ $c = New-ExcelChartDefinition -Title "ProcessStats" `
-SeriesHeader "PM","VM" -SeriesHeader "PM","VM"
$data | $data |
Export-Excel -Path temp.xlsx -AutoSize -TableName Processes -ExcelChartDefinition $c -Show Export-Excel -Path $xlSourcefile -AutoSize -TableName Processes -ExcelChartDefinition $c -Show

View File

@@ -1,6 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item temp.xlsx -ErrorAction Ignore #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = @" $data = @"
A,B,C,Date A,B,C,Date
@@ -15,5 +18,5 @@ $c = New-ExcelChartDefinition -Title Impressions `
-SeriesHeader 'B data','A data' ` -SeriesHeader 'B data','A data' `
-Row 0 -Column 0 -Row 0 -Column 0
$data | ConvertFrom-Csv | Export-Excel -path temp.xlsx -AutoSize -TableName Impressions $data | ConvertFrom-Csv | Export-Excel -path $xlSourcefile -AutoSize -TableName Impressions
Export-Excel -path temp.xlsx -worksheetName chartPage -ExcelChartDefinition $c -show Export-Excel -path $xlSourcefile -worksheetName chartPage -ExcelChartDefinition $c -show

View File

@@ -1,6 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item -Path Tools.xlsx #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = @" $data = @"
ID,Product,Quantity,Price,Total ID,Product,Quantity,Price,Total
@@ -16,4 +19,4 @@ $c2 = New-ExcelChartDefinition -YRange "Total "-XRange "Product" -Title "Total
$c3 = New-ExcelChartDefinition -YRange "Quantity"-XRange "Product" -Title "Sales volume" -NoLegend -Height 225 -Row 15 $c3 = New-ExcelChartDefinition -YRange "Quantity"-XRange "Product" -Title "Sales volume" -NoLegend -Height 225 -Row 15
$data | ConvertFrom-Csv | $data | ConvertFrom-Csv |
Export-Excel -Path "Tools.xlsx" -AutoFilter -AutoNameRange -AutoSize -ExcelChartDefinition $c1,$c2,$c3 -Show Export-Excel -Path $xlSourcefile -AutoFilter -AutoNameRange -AutoSize -ExcelChartDefinition $c1,$c2,$c3 -Show

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

View File

@@ -1,5 +1,9 @@
$xlfile = "$env:TEMP\visitors.xlsx" try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item $xlfile -ErrorAction SilentlyContinue
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-Csv @" $data = ConvertFrom-Csv @"
Week, TotalVisitors Week, TotalVisitors
@@ -23,5 +27,5 @@ $cd = New-ExcelChartDefinition `
-NoLegend ` -NoLegend `
-ChartTrendLine Linear -ChartTrendLine Linear
$data | Export-Excel $xlfile -Show -AutoNameRange -AutoSize -TableName Visitors -ExcelChartDefinition $cd $data | Export-Excel $xlSourcefile -Show -AutoNameRange -AutoSize -TableName Visitors -ExcelChartDefinition $cd

View File

@@ -10,8 +10,10 @@ function plot {
$minx=[math]::Round($minx,1) $minx=[math]::Round($minx,1)
$maxx=[math]::Round($maxx,1) $maxx=[math]::Round($maxx,1)
$file = 'C:\temp\plot.xlsx' #Get rid of pre-exisiting sheet
Remove-Item $file -ErrorAction Ignore $xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
# $c = New-ExcelChart -XRange X -YRange Y -ChartType Line -NoLegend -Title Plot -Column 2 -ColumnOffSetPixels 35 # $c = New-ExcelChart -XRange X -YRange Y -ChartType Line -NoLegend -Title Plot -Column 2 -ColumnOffSetPixels 35
@@ -20,7 +22,7 @@ function plot {
X=$i.ToString("N1") X=$i.ToString("N1")
Y=(&$f $i) Y=(&$f $i)
} }
}) | Export-Excel $file -Show -AutoNameRange -LineChart -NoLegend #-ExcelChartDefinition $c }) | Export-Excel $xlSourcefile -Show -AutoNameRange -LineChart -NoLegend #-ExcelChartDefinition $c
} }
function pi {[math]::pi} function pi {[math]::pi}

View File

@@ -1,11 +1,13 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$file = "$env:temp\conditionalTextFormatting.xlsx" #Get rid of pre-exisiting sheet
Remove-Item $file -ErrorAction Ignore $xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
Get-Service | Get-Service |
Select-Object Status, Name, DisplayName, ServiceName | Select-Object Status, Name, DisplayName, ServiceName |
Export-Excel $file -Show -AutoSize -AutoFilter -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -AutoFilter -ConditionalText $(
New-ConditionalText stop #Stop is the condition value, the rule is defaults to 'Contains text' and the default Colors are used New-ConditionalText stop #Stop is the condition value, the rule is defaults to 'Contains text' and the default Colors are used
New-ConditionalText runn darkblue cyan #runn is the condition value, the rule is defaults to 'Contains text'; the foregroundColur is darkblue and the background is cyan New-ConditionalText runn darkblue cyan #runn is the condition value, the rule is defaults to 'Contains text'; the foregroundColur is darkblue and the background is cyan
New-ConditionalText -ConditionalType EndsWith svc wheat green #the rule here is 'Ends with' and the value is 'svc' the forground is wheat and the background dark green New-ConditionalText -ConditionalType EndsWith svc wheat green #the rule here is 'Ends with' and the value is 'svc' the forground is wheat and the background dark green

View File

@@ -12,8 +12,10 @@ $data = $(
New-PSItem g h i New-PSItem g h i
) )
$file ="$env:temp\testblanks.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
Remove-Item $file -ErrorAction Ignore
#use the conditional format definition created above #use the conditional format definition created above
$data | Export-Excel $file -show -ConditionalText $ContainsBlanks $data | Export-Excel $xlSourcefile -show -ConditionalText $ContainsBlanks

View File

@@ -1,12 +1,14 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$path = "$env:temp\test.xlsx" #Get rid of pre-exisiting sheet
Remove-Item -Path $path -ErrorAction Ignore $xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
#Export processes, and get an ExcelPackage object representing the file. #Export processes, and get an ExcelPackage object representing the file.
$excel = Get-Process | $excel = Get-Process |
Select-Object -Property Name,Company,Handles,CPU,PM,NPM,WS | Select-Object -Property Name,Company,Handles,CPU,PM,NPM,WS |
Export-Excel -Path $path -ClearSheet -WorkSheetname "Processes" -PassThru Export-Excel -Path $xlSourcefile -ClearSheet -WorkSheetname "Processes" -PassThru
$sheet = $excel.Workbook.Worksheets["Processes"] $sheet = $excel.Workbook.Worksheets["Processes"]
@@ -15,7 +17,7 @@ $sheet.Column(1) | Set-ExcelRange -Bold -AutoFit
$sheet.Column(2) | Set-ExcelRange -Width 29 -WrapText $sheet.Column(2) | Set-ExcelRange -Width 29 -WrapText
$sheet.Column(3) | Set-ExcelRange -HorizontalAlignment Right -NFormat "#,###" $sheet.Column(3) | Set-ExcelRange -HorizontalAlignment Right -NFormat "#,###"
Set-ExcelRange -Range -Address $sheet.Cells["E1:H1048576"] -HorizontalAlignment Right -NFormat "#,###" Set-ExcelRange -Range $sheet.Cells["E1:H1048576"] -HorizontalAlignment Right -NFormat "#,###"
Set-ExcelRange -Range $sheet.Column(4) -HorizontalAlignment Right -NFormat "#,##0.0" -Bold Set-ExcelRange -Range $sheet.Column(4) -HorizontalAlignment Right -NFormat "#,##0.0" -Bold
#In Set-ExcelRange "-Address" is an alias for "-Range" #In Set-ExcelRange "-Address" is an alias for "-Range"

View File

@@ -1,8 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = "$env:TEMP\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = $( $data = $(
@@ -25,6 +26,6 @@ $data = $(
# the syntax is used is Export-excel -ConditionalText (New-Conditional text <parameters>) <other parameters> # the syntax is used is Export-excel -ConditionalText (New-Conditional text <parameters>) <other parameters>
#$data | Export-Excel $f -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType AboveAverage) #$data | Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType AboveAverage)
$data | Export-Excel $f -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType BelowAverage) $data | Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType BelowAverage)
#$data | Export-Excel $f -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType TopPercent) #$data | Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType TopPercent)

View File

@@ -1,3 +1,5 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
function Get-DateOffset { function Get-DateOffset {
param($days=0) param($days=0)

View File

@@ -1,12 +1,15 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item "$env:TEMP\testExport.xlsx" -ErrorAction Ignore #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
Get-Process | Where-Object Company | Select-Object Company, Name, PM, Handles, *mem* | Get-Process | Where-Object Company | Select-Object Company, Name, PM, Handles, *mem* |
#This example creates a 3 Icon set for the values in the "PM column, and Highlights company names (anywhere in the data) with different colors #This example creates a 3 Icon set for the values in the "PM column, and Highlights company names (anywhere in the data) with different colors
Export-Excel "$env:TEMP\testExport.xlsx" -Show -AutoSize -AutoNameRange ` Export-Excel -Path $xlSourcefile -Show -AutoSize -AutoNameRange `
-ConditionalFormat $( -ConditionalFormat $(
New-ConditionalFormattingIconSet -Range "C:C" ` New-ConditionalFormattingIconSet -Range "C:C" `
-ConditionalFormat ThreeIconSet -IconType Arrows -ConditionalFormat ThreeIconSet -IconType Arrows

View File

@@ -1,10 +1,11 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 | .\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType Last7Days New-ConditionalText -ConditionalType Last7Days
) )

View File

@@ -1,10 +1,11 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 | .\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType LastMonth New-ConditionalText -ConditionalType LastMonth
) )

View File

@@ -1,10 +1,11 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 | .\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType LastWeek New-ConditionalText -ConditionalType LastWeek
) )

View File

@@ -1,10 +1,11 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 | .\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType NextMonth New-ConditionalText -ConditionalType NextMonth
) )

View File

@@ -1,10 +1,11 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 | .\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType NextWeek New-ConditionalText -ConditionalType NextWeek
) )

View File

@@ -1,10 +1,11 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 | .\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType ThisMonth New-ConditionalText -ConditionalType ThisMonth
) )

View File

@@ -1,10 +1,11 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 | .\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType ThisWeek New-ConditionalText -ConditionalType ThisWeek
) )

View File

@@ -1,10 +1,11 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 | .\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType Today New-ConditionalText -ConditionalType Today
) )

View File

@@ -1,10 +1,11 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 | .\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType Tomorrow New-ConditionalText -ConditionalType Tomorrow
) )

View File

@@ -1,10 +1,11 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 | .\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType Yesterday New-ConditionalText -ConditionalType Yesterday
) )

View File

@@ -1,8 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $f -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = $( $data = $(
@@ -22,4 +23,4 @@ $data = $(
New-PSItem SouthWest 11 New-PSItem SouthWest 11
) )
$data | Export-Excel $f -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType DuplicateValues) $data | Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType DuplicateValues)

View File

@@ -1,6 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item -Path .\test.xlsx -ErrorAction Ignore #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$excel = @" $excel = @"
Month,New York City,Austin Texas,Portland Oregon Month,New York City,Austin Texas,Portland Oregon
@@ -17,7 +20,7 @@ Oct,65,82,63
Nov,54,71,52 Nov,54,71,52
Dec,44,63,46 Dec,44,63,46
"@ | ConvertFrom-csv | "@ | ConvertFrom-csv |
Export-Excel -Path .\test.xlsx -WorkSheetname Sheet1 -AutoNameRange -AutoSize -Title "Monthly Temperatures" -PassThru Export-Excel -Path $xlSourcefile -WorkSheetname Sheet1 -AutoNameRange -AutoSize -Title "Monthly Temperatures" -PassThru
$sheet = $excel.Workbook.Worksheets["Sheet1"] $sheet = $excel.Workbook.Worksheets["Sheet1"]
Add-ConditionalFormatting -Worksheet $sheet -Range "B1:D14" -DataBarColor CornflowerBlue Add-ConditionalFormatting -Worksheet $sheet -Range "B1:D14" -DataBarColor CornflowerBlue

View File

@@ -1,7 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\testExport.xlsx" #Get rid of pre-exisiting sheet
Remove-Item $f -ErrorAction Ignore $xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
function Get-DateOffset ($days=0) { function Get-DateOffset ($days=0) {
(Get-Date).AddDays($days).ToShortDateString() (Get-Date).AddDays($days).ToShortDateString()
@@ -13,7 +15,7 @@ $(
New-PSItem (Get-DateOffset -10) (Get-DateOffset -1) New-PSItem (Get-DateOffset -10) (Get-DateOffset -1)
) | ) |
Export-Excel $f -Show -AutoSize -AutoNameRange -ConditionalText $( Export-Excel $xlSourcefile -Show -AutoSize -AutoNameRange -ConditionalText $(
New-ConditionalText -Range Start -ConditionalType Yesterday -ConditionalTextColor Red New-ConditionalText -Range Start -ConditionalType Yesterday -ConditionalTextColor Red
New-ConditionalText -Range End -ConditionalType Yesterday -BackgroundColor Blue -ConditionalTextColor Red New-ConditionalText -Range End -ConditionalType Yesterday -BackgroundColor Blue -ConditionalTextColor Red
) )

View File

@@ -1,6 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item -Path .\test.xlsx -ErrorAction Ignore #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$excel = @" $excel = @"
Month,Sales Month,Sales
@@ -11,7 +14,7 @@ Apr,952
May,770 May,770
Jun,621 Jun,621
"@ | ConvertFrom-csv | "@ | ConvertFrom-csv |
Export-Excel -Path .\test.xlsx -WorkSheetname Sheet1 -AutoNameRange -PassThru Export-Excel -Path $xlSourcefile -WorkSheetname Sheet1 -AutoNameRange -PassThru
$sheet = $excel.Workbook.Worksheets["Sheet1"] $sheet = $excel.Workbook.Worksheets["Sheet1"]
Add-ConditionalFormatting -Worksheet $sheet -Range "B1:B7" -DataBarColor LawnGreen Add-ConditionalFormatting -Worksheet $sheet -Range "B1:B7" -DataBarColor LawnGreen

View File

@@ -8,18 +8,22 @@ $data = $(
New-PSItem 500 New-PSItem 500
) )
$file1 = "$env:Temp\tryComparison1.xlsx" #Get rid of pre-exisiting sheet
$file2 = "$env:Temp\tryComparison2.xlsx" $xlSourcefile1 = "$env:TEMP\ImportExcelExample1.xlsx"
$xlSourcefile2 = "$env:TEMP\ImportExcelExample2.xlsx"
Remove-Item -Path $file1 -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile1"
Remove-Item -Path $file2 -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile2"
$data | Export-Excel $file1 -Show -ConditionalText $( Remove-Item $xlSourcefile1 -ErrorAction Ignore
Remove-Item $xlSourcefile2 -ErrorAction Ignore
$data | Export-Excel $xlSourcefile1 -Show -ConditionalText $(
New-ConditionalText -ConditionalType GreaterThan 300 New-ConditionalText -ConditionalType GreaterThan 300
New-ConditionalText -ConditionalType LessThan 300 -BackgroundColor cyan New-ConditionalText -ConditionalType LessThan 300 -BackgroundColor cyan
) )
$data | Export-Excel $file2 -Show -ConditionalText $( $data | Export-Excel $xlSourcefile2 -Show -ConditionalText $(
New-ConditionalText -ConditionalType GreaterThanOrEqual 275 New-ConditionalText -ConditionalType GreaterThanOrEqual 275
New-ConditionalText -ConditionalType LessThanOrEqual 250 -BackgroundColor cyan New-ConditionalText -ConditionalType LessThanOrEqual 250 -BackgroundColor cyan
) )

View File

@@ -0,0 +1,37 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-csv @"
Store,January,February,March,April,May,June
store27,99511,64582,45216,48690,64921,54066
store82,22275,23708,28223,26699,41388,31648
store41,24683,22583,97947,31999,39092,41201
store16,16568,48040,68589,20394,63202,26197
store21,99353,23470,28398,21788,94101,88608
store86,66662,83321,27489,92627,54084,24278
store07,92692,53300,29284,39643,33556,53885
store58,68875,83705,66635,81025,30207,75570
store01,21292,82341,81339,12505,29516,41634
store82,74047,93325,25002,40113,76278,45707
"@
Export-Excel -InputObject $data -Path $xlSourcefile -TableName RawData -WorksheetName RawData
Export-Excel -InputObject $data -Path $xlSourcefile -TableName TopData -WorksheetName StoresTop10Sales
Export-Excel -InputObject $data -Path $xlSourcefile -TableName Databar -WorksheetName StoresSalesDataBar
Export-Excel -InputObject $data -Path $xlSourcefile -TableName TwoColorScale -WorksheetName StoresSalesTwoColorScale
$xl = Open-ExcelPackage -Path $xlSourcefile
Set-ExcelRange -Worksheet $xl.StoresTop10Sales -Range $xl.StoresTop10Sales.dimension.address -NumberFormat 'Currency' -AutoSize
Set-ExcelRange -Worksheet $xl.StoresSalesDataBar -Range $xl.StoresSalesDataBar.dimension.address -NumberFormat 'Currency' -AutoSize
Set-ExcelRange -Worksheet $xl.StoresSalesTwoColorScale -Range $xl.StoresSalesDataBar.dimension.address -NumberFormat 'Currency' -AutoSize
Add-ConditionalFormatting -Worksheet $xl.StoresTop10Sales -Address $xl.StoresTop10Sales.dimension.address -RuleType Top -ForegroundColor white -BackgroundColor green -ConditionValue 10
Add-ConditionalFormatting -Worksheet $xl.StoresSalesDataBar -Address $xl.StoresSalesDataBar.dimension.address -DataBarColor Red
Add-ConditionalFormatting -Worksheet $xl.StoresSalesTwoColorScale -Address $xl.StoresSalesDataBar.dimension.address -RuleType TwoColorScale
Close-ExcelPackage $xl -Show

View File

@@ -1,7 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = "$env:temp\dashboard.xlsx" #Get rid of pre-exisiting sheet
Remove-Item $f -ErrorAction Ignore $xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = @" $data = @"
From,To,RDollars,RPercent,MDollars,MPercent,Revenue,Margin From,To,RDollars,RPercent,MDollars,MPercent,Revenue,Margin
@@ -13,9 +15,9 @@ New York,San Francisco,3221000,.0629,1088000,.04,436,21
New York,Phoneix,2782000,.0723,467000,.10,674,33 New York,Phoneix,2782000,.0723,467000,.10,674,33
"@ | ConvertFrom-Csv "@ | ConvertFrom-Csv
$data | Export-Excel $f -AutoSize $data | Export-Excel $xlSourcefile -AutoSize
$excel = Open-ExcelPackage $f $excel = Open-ExcelPackage $xlSourcefile
$sheet1 = $excel.Workbook.Worksheets["sheet1"] $sheet1 = $excel.Workbook.Worksheets["sheet1"]

View File

@@ -1,8 +1,11 @@
# DSUM # DSUM
# Adds the numbers in a field (column) of records in a list or database that match conditions that you specify. # Adds the numbers in a field (column) of records in a list or database that match conditions that you specify.
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$xlfile = "$env:TEMP\test.xlsx" #Get rid of pre-exisiting sheet
Remove-Item $xlfile -ErrorAction SilentlyContinue $xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-Csv @" $data = ConvertFrom-Csv @"
Color,Date,Sales Color,Date,Sales
@@ -14,7 +17,7 @@ Red,1/17/2018,150
Blue,1/17/2018,300 Blue,1/17/2018,300
"@ "@
$xl = Export-Excel -InputObject $data -Path $xlfile -AutoSize -AutoFilter -TableName SalesInfo -AutoNameRange -PassThru $xl = Export-Excel -InputObject $data -Path $xlSourcefile -AutoSize -AutoFilter -TableName SalesInfo -AutoNameRange -PassThru
$databaseAddress = $xl.Sheet1.Dimension.Address $databaseAddress = $xl.Sheet1.Dimension.Address
Set-Format -Worksheet $xl.Sheet1 -Range C:C -NumberFormat '$##0' Set-Format -Worksheet $xl.Sheet1 -Range C:C -NumberFormat '$##0'

View File

@@ -1,5 +1,9 @@
$xlfile = "$env:TEMP\test.xlsx" try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item $xlfile -ErrorAction SilentlyContinue
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-Csv @" $data = ConvertFrom-Csv @"
Fruit,Amount Fruit,Amount
@@ -9,11 +13,11 @@ Bananas,60
Lemons,40 Lemons,40
"@ "@
$xl = Export-Excel -InputObject $data -Path $xlfile -PassThru -AutoSize $xl = Export-Excel -InputObject $data -Path $xlSourcefile -PassThru -AutoSize
Set-ExcelRange -Worksheet $xl.Sheet1 -Range D2 -BackgroundColor LightBlue -Value Apples Set-ExcelRange -Worksheet $xl.Sheet1 -Range D2 -BackgroundColor LightBlue -Value Apples
$Rows = $xl.Sheet1.Dimension.Rows $rows = $xl.Sheet1.Dimension.Rows
Set-ExcelRange -Worksheet $xl.Sheet1 -Range E2 -Formula "=VLookup(D2,A2:B$($Rows),2,FALSE)" Set-ExcelRange -Worksheet $xl.Sheet1 -Range E2 -Formula "=VLookup(D2,A2:B$($rows),2,FALSE)"
Close-ExcelPackage $xl -Show Close-ExcelPackage $xl -Show

View File

@@ -15,8 +15,10 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$path = "$Env:TEMP\DataValidation.xlsx" #Get rid of pre-exisiting sheet
Remove-Item $path -ErrorAction SilentlyContinue $xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-Csv -InputObject @" $data = ConvertFrom-Csv -InputObject @"
ID,Region,Product,Quantity,Price ID,Region,Product,Quantity,Price
@@ -29,7 +31,7 @@ ID,Region,Product,Quantity,Price
# Export the raw data # Export the raw data
$excelPackage = $Data | $excelPackage = $Data |
Export-Excel -WorksheetName "Sales" -Path $path -PassThru Export-Excel -WorksheetName "Sales" -Path $xlSourcefile -PassThru
# Creates a sheet with data that will be used in a validation rule # Creates a sheet with data that will be used in a validation rule
$excelPackage = @('Chisel', 'Crowbar', 'Drill', 'Hammer', 'Nails', 'Saw', 'Screwdriver', 'Wrench') | $excelPackage = @('Chisel', 'Crowbar', 'Drill', 'Hammer', 'Nails', 'Saw', 'Screwdriver', 'Wrench') |

View File

@@ -0,0 +1,46 @@
function Export-MultipleExcelSheets {
<#
.Synopsis
Takes a hash table of scriptblocks and exports each as a sheet in an Excel file
.Example
$p = Get-Process
$InfoMap = @{
PM = { $p | Select-Object company, pm }
Handles = { $p | Select-Object company, handles }
Services = { Get-Service }
}
Export-MultipleExcelSheets -Path $xlfile -InfoMap $InfoMap -Show -AutoSize
#>
param(
[Parameter(Mandatory = $true)]
$Path,
[Parameter(Mandatory = $true)]
[hashtable]$InfoMap,
[string]$Password,
[Switch]$Show,
[Switch]$AutoSize
)
$parameters = @{ } + $PSBoundParameters
$parameters.Remove("InfoMap")
$parameters.Remove("Show")
$parameters.Path = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($Path)
foreach ($entry in $InfoMap.GetEnumerator()) {
if ($entry.Value -is [scriptblock]) {
Write-Progress -Activity "Exporting" -Status "$($entry.Key)"
$parameters.WorkSheetname = $entry.Key
& $entry.Value | Export-Excel @parameters
}
else {
Write-Warning "$($entry.Key) not exported, needs to be a scriptblock"
}
}
if ($Show) { Invoke-Item $Path }
}

View File

@@ -0,0 +1,19 @@
. "$PSScriptRoot\Export-MultipleExcelSheets.ps1"
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$p = Get-Process
$InfoMap = @{
PM = { $p | Select-Object company, pm }
Handles = { $p | Select-Object company, handles }
Services = { Get-Service }
Files = { Get-ChildItem -File }
Albums = { ConvertFrom-Csv (Invoke-RestMethod https://raw.githubusercontent.com/dfinke/powershell-for-developers/master/chapter05/BeaverMusic/BeaverMusic.UI.Shell/albums.csv) }
WillNotGetExported = "Hello World"
}
Export-MultipleExcelSheets -Path $xlSourcefile -InfoMap $InfoMap -Show -AutoSize

View File

@@ -2,8 +2,10 @@ param ($fibonacciDigits=10)
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$file = "fib.xlsx" #Get rid of pre-exisiting sheet
Remove-Item "fib.xlsx" -ErrorAction Ignore $xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$( $(
New-PSItem 0 New-PSItem 0
@@ -15,4 +17,4 @@ $(
New-PSItem ('=a{0}+a{1}' -f ($_+1),$_) New-PSItem ('=a{0}+a{1}' -f ($_+1),$_)
} }
) )
) | Export-Excel $file -Show ) | Export-Excel $xlSourcefile -Show

View File

@@ -1,10 +1,13 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$xlfile = "$env:temp\testFmt.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
Get-Process | Get-Process |
Select-Object Company,Handles,PM, NPM| Select-Object Company,Handles,PM, NPM|
Export-Excel $xlfile -Show -AutoSize -CellStyleSB { Export-Excel $xlSourcefile -Show -AutoSize -CellStyleSB {
param( param(
$workSheet, $workSheet,
$totalRows, $totalRows,

View File

@@ -1,4 +1,6 @@
$data = ConvertFrom-Csv @' try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$data = ConvertFrom-Csv @'
Item,Quantity,Price,Total Cost Item,Quantity,Price,Total Cost
Footballs,9,21.95,197.55 Footballs,9,21.95,197.55
Cones,36,7.99,287.64 Cones,36,7.99,287.64

View File

@@ -1,7 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$xlfile = "$env:temp\testFmt.xlsx" #Get rid of pre-exisiting sheet
Remove-Item $xlfile -ErrorAction Ignore $xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$RandomStyle = { $RandomStyle = {
param( param(
@@ -17,4 +19,4 @@ $RandomStyle = {
Get-Process | Get-Process |
Select-Object Company,Handles,PM, NPM| Select-Object Company,Handles,PM, NPM|
Export-Excel $xlfile -Show -AutoSize -CellStyleSB $RandomStyle Export-Excel $xlSourcefile -Show -AutoSize -CellStyleSB $RandomStyle

View File

@@ -1,10 +1,13 @@
$xlfile = "$env:TEMP\Points.xlsx" try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item $xlfile -ErrorAction SilentlyContinue #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$PivotTableDefinition = New-PivotTableDefinition -Activate -PivotTableName Points ` $PivotTableDefinition = New-PivotTableDefinition -Activate -PivotTableName Points `
-PivotRows Driver, Date -PivotData @{Points = "SUM"} -GroupDateRow Date -GroupDatePart Years, Months -PivotRows Driver, Date -PivotData @{Points = "SUM"} -GroupDateRow Date -GroupDatePart Years, Months
Import-Csv "$PSScriptRoot\First10Races.csv" | Import-Csv "$PSScriptRoot\First10Races.csv" |
Select-Object Race, @{n = "Date"; e = {[datetime]::ParseExact($_.date, "dd/MM/yyyy", (Get-Culture))}}, FinishPosition, Driver, GridPosition, Team, Points | Select-Object Race, @{n = "Date"; e = {[datetime]::ParseExact($_.date, "dd/MM/yyyy", (Get-Culture))}}, FinishPosition, Driver, GridPosition, Team, Points |
Export-Excel $xlfile -Show -AutoSize -PivotTableDefinition $PivotTableDefinition Export-Excel $xlSourcefile -Show -AutoSize -PivotTableDefinition $PivotTableDefinition

View File

@@ -1,10 +1,13 @@
$xlfile = "$env:TEMP\Places.xlsx" try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item $xlfile -ErrorAction SilentlyContinue #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$PivotTableDefinition = New-PivotTableDefinition -Activate -PivotTableName Places ` $PivotTableDefinition = New-PivotTableDefinition -Activate -PivotTableName Places `
-PivotRows Driver, FinishPosition -PivotData @{Date = "Count"} -GroupNumericRow FinishPosition -GroupNumericMin 1 -GroupNumericMax 25 -GroupNumericInterval 3 -PivotRows Driver, FinishPosition -PivotData @{Date = "Count"} -GroupNumericRow FinishPosition -GroupNumericMin 1 -GroupNumericMax 25 -GroupNumericInterval 3
Import-Csv "$PSScriptRoot\First10Races.csv" | Import-Csv "$PSScriptRoot\First10Races.csv" |
Select-Object Race, @{n = "Date"; e = {[datetime]::ParseExact($_.date, "dd/MM/yyyy", (Get-Culture))}}, FinishPosition, Driver, GridPosition, Team, Points | Select-Object Race, @{n = "Date"; e = {[datetime]::ParseExact($_.date, "dd/MM/yyyy", (Get-Culture))}}, FinishPosition, Driver, GridPosition, Team, Points |
Export-Excel $xlfile -Show -AutoSize -PivotTableDefinition $PivotTableDefinition Export-Excel $xlSourcefile -Show -AutoSize -PivotTableDefinition $PivotTableDefinition

View File

@@ -1,3 +1,4 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$data = ConvertFrom-Csv @" $data = ConvertFrom-Csv @"
Timestamp,Tenant Timestamp,Tenant
10/29/2018 3:00:00.123,1 10/29/2018 3:00:00.123,1
@@ -15,8 +16,10 @@ Timestamp,Tenant
10/29/2018 3:02:00.999,1 10/29/2018 3:02:00.999,1
"@ | Select-Object @{n = 'Timestamp'; e = {Get-date $_.timestamp}}, tenant, @{n = 'Bucket'; e = { - (Get-date $_.timestamp).Second % 30}} "@ | Select-Object @{n = 'Timestamp'; e = {Get-date $_.timestamp}}, tenant, @{n = 'Bucket'; e = { - (Get-date $_.timestamp).Second % 30}}
$f = "$env:temp\pivottest.xlsx" #Get rid of pre-exisiting sheet
Remove-Item $f -ErrorAction SilentlyContinue $xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$pivotDefParams = @{ $pivotDefParams = @{
PivotTableName = 'Timestamp Buckets' PivotTableName = 'Timestamp Buckets'
@@ -29,7 +32,7 @@ $pivotDefParams = @{
$excelParams = @{ $excelParams = @{
PivotTableDefinition = New-PivotTableDefinition @pivotDefParams PivotTableDefinition = New-PivotTableDefinition @pivotDefParams
Path = $f Path = $xlSourcefile
WorkSheetname = "Log Data" WorkSheetname = "Log Data"
AutoSize = $true AutoSize = $true
AutoFilter = $true AutoFilter = $true

View File

@@ -3,6 +3,7 @@
#We will create links to each race in the first 10 rows of the spreadSheet #We will create links to each race in the first 10 rows of the spreadSheet
#The next row will be column labels #The next row will be column labels
#After that will come a block for each race. #After that will come a block for each race.
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Read the data, and decide how much space to leave for the hyperlinks #Read the data, and decide how much space to leave for the hyperlinks
$scriptPath = Split-Path -Path $MyInvocation.MyCommand.path -Parent $scriptPath = Split-Path -Path $MyInvocation.MyCommand.path -Parent

View File

@@ -1,6 +1,9 @@
#Get rid of pre-exisiting sheet try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$path = "$Env:TEMP\test.xlsx"
remove-item -Path $path -ErrorAction SilentlyContinue #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
#Create simple pages for 3 stores with product ID, Product Name, quanity price and total #Create simple pages for 3 stores with product ID, Product Name, quanity price and total
@@ -11,7 +14,7 @@ ID,Product,Quantity,Price,Total
12003,Saw,12,15.37,184.44 12003,Saw,12,15.37,184.44
12010,Drill,20,8,160 12010,Drill,20,8,160
12011,Crowbar,7,23.48,164.36 12011,Crowbar,7,23.48,164.36
"@ | ConvertFrom-Csv| Export-Excel -Path $path -WorkSheetname Oxford "@ | ConvertFrom-Csv| Export-Excel -Path $xlSourcefile -WorkSheetname Oxford
@" @"
ID,Product,Quantity,Price,Total ID,Product,Quantity,Price,Total
@@ -20,7 +23,7 @@ ID,Product,Quantity,Price,Total
12003,Saw,10,15.37,153.70 12003,Saw,10,15.37,153.70
12010,Drill,10,8,80 12010,Drill,10,8,80
12012,Pliers,2,14.99,29.98 12012,Pliers,2,14.99,29.98
"@ | ConvertFrom-Csv| Export-Excel -Path $path -WorkSheetname Abingdon "@ | ConvertFrom-Csv| Export-Excel -Path $xlSourcefile -WorkSheetname Abingdon
@" @"
@@ -29,7 +32,7 @@ ID,Product,Quantity,Price,Total
12002,Hammer,2,12.10,24.20 12002,Hammer,2,12.10,24.20
12010,Drill,11,8,88 12010,Drill,11,8,88
12012,Pliers,3,14.99,44.97 12012,Pliers,3,14.99,44.97
"@ | ConvertFrom-Csv| Export-Excel -Path $path -WorkSheetname Banbury "@ | ConvertFrom-Csv| Export-Excel -Path $xlSourcefile -WorkSheetname Banbury
#define a pivot table with a chart to show a sales by store, broken down by product #define a pivot table with a chart to show a sales by store, broken down by product
$ptdef = New-PivotTableDefinition -PivotTableName "Summary" -PivotRows "Store" -PivotColumns "Product" -PivotData @{"Total"="SUM"} -IncludePivotChart -ChartTitle "Sales Breakdown" -ChartType ColumnStacked -ChartColumn 10 $ptdef = New-PivotTableDefinition -PivotTableName "Summary" -PivotRows "Store" -PivotColumns "Product" -PivotData @{"Total"="SUM"} -IncludePivotChart -ChartTitle "Sales Breakdown" -ChartType ColumnStacked -ChartColumn 10
@@ -40,4 +43,4 @@ $ptdef = New-PivotTableDefinition -PivotTableName "Summary" -PivotRows "Store" -
#Put in a title and freeze to top of the sheet including title and colmun headings #Put in a title and freeze to top of the sheet including title and colmun headings
#Add the Pivot table. #Add the Pivot table.
#Show the result #Show the result
Join-Worksheet -Path $path -WorkSheetName "Total" -Clearsheet -FromLabel "Store" -TableName "Combined" -TableStyle Light1 -AutoSize -BoldTopRow -FreezePane 2,1 -Title "Store Sales Summary" -TitleBold -TitleSize 14 -PivotTableDefinition $ptdef -show Join-Worksheet -Path $xlSourcefile -WorkSheetName "Total" -Clearsheet -FromLabel "Store" -TableName "Combined" -TableStyle Light1 -AutoSize -BoldTopRow -FreezePane 2,1 -Title "Store Sales Summary" -TitleBold -TitleSize 14 -PivotTableDefinition $ptdef -show

View File

@@ -1,13 +1,17 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$path = "$env:TEMP\Test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue
#Export disk volume, and Network adapter to their own sheets. #Export disk volume, and Network adapter to their own sheets.
Get-CimInstance -ClassName Win32_LogicalDisk | Get-CimInstance -ClassName Win32_LogicalDisk |
Select-Object -Property DeviceId,VolumeName, Size,Freespace | Select-Object -Property DeviceId,VolumeName, Size,Freespace |
Export-Excel -Path $path -WorkSheetname Volumes -NumberFormat "0,000" Export-Excel -Path $xlSourcefile -WorkSheetname Volumes -NumberFormat "0,000"
Get-NetAdapter | Get-NetAdapter |
Select-Object -Property Name,InterfaceDescription,MacAddress,LinkSpeed | Select-Object -Property Name,InterfaceDescription,MacAddress,LinkSpeed |
Export-Excel -Path $path -WorkSheetname NetAdapters Export-Excel -Path $xlSourcefile -WorkSheetname NetAdapters
#Create a summary page with a title of Summary, label the blocks with the name of the sheet they came from and hide the source sheets #Create a summary page with a title of Summary, label the blocks with the name of the sheet they came from and hide the source sheets
Join-Worksheet -Path $path -HideSource -WorkSheetName Summary -NoHeader -LabelBlocks -AutoSize -Title "Summary" -TitleBold -TitleSize 22 -show Join-Worksheet -Path $xlSourcefile -HideSource -WorkSheetName Summary -NoHeader -LabelBlocks -AutoSize -Title "Summary" -TitleBold -TitleSize 22 -show

View File

@@ -1,15 +1,16 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$xlfile = "$env:temp\AllSales.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $xlfile -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$params = @{ $params = @{
AutoSize = $true AutoSize = $true
AutoFilter = $true AutoFilter = $true
AutoNameRange = $true AutoNameRange = $true
ExcelChartDefinition = New-ExcelChartDefinition -XRange Item -YRange UnitSold -Title 'Units Sold' ExcelChartDefinition = New-ExcelChartDefinition -XRange Item -YRange UnitSold -Title 'Units Sold'
Path = $xlfile Path = $xlSourcefile
} }
#Import 4 sets of sales data from 4 CSV files, using the parameters above. #Import 4 sets of sales data from 4 CSV files, using the parameters above.
Import-Csv $PSScriptRoot\NorthSales.csv | Export-Excel -WorkSheetname North @params Import-Csv $PSScriptRoot\NorthSales.csv | Export-Excel -WorkSheetname North @params

View File

@@ -1,8 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return} try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$xlFile = "$env:TEMP\mw.xlsx" #Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Remove-Item $xlFile -ErrorAction Ignore Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$leftCsv = @" $leftCsv = @"
MyProp1,MyProp2,Length MyProp1,MyProp2,Length
@@ -16,4 +17,4 @@ a,b,10
c,d,21 c,d,21
"@ | ConvertFrom-Csv "@ | ConvertFrom-Csv
Merge-Worksheet -OutputFile $xlFile -ReferenceObject $leftCsv -DifferenceObject $rightCsv -Key Length -Show Merge-Worksheet -OutputFile $xlSourcefile -ReferenceObject $leftCsv -DifferenceObject $rightCsv -Key Length -Show

View File

@@ -1,3 +1,5 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item -Path "$env:temp\server*.xlsx" , "$env:temp\Combined*.xlsx" -ErrorAction SilentlyContinue Remove-Item -Path "$env:temp\server*.xlsx" , "$env:temp\Combined*.xlsx" -ErrorAction SilentlyContinue
#Get a subset of services into $s and export them #Get a subset of services into $s and export them

View File

@@ -1,3 +1,5 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Remove-Item -Path "$env:temp\server*.xlsx" , "$env:temp\Combined*.xlsx" -ErrorAction SilentlyContinue Remove-Item -Path "$env:temp\server*.xlsx" , "$env:temp\Combined*.xlsx" -ErrorAction SilentlyContinue
#Get a subset of services into $s and export them #Get a subset of services into $s and export them

View File

@@ -7,7 +7,7 @@ param(
$InterestRate = .065, $InterestRate = .065,
$Term = 30 $Term = 30
) )
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
function New-CellData { function New-CellData {
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification='Does not change system state')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification='Does not change system state')]
param( param(

View File

@@ -0,0 +1,225 @@
#Requires -Modules @{ ModuleName='Pester'; ModuleVersion='5.1' }
<#
.SYNOPSIS
Run Pester tests and export the results to an Excel file.
.DESCRIPTION
Use the `PesterConfigurationFile` to configure Pester to your requirements.
(Set the Path to the folder containing the tests, ...). Pester will be
invoked with the configuration you defined.
Each Pester 'it' clause will be exported to a row in an Excel file
containing the details of the test (Path, Duration, Result, ...).
.EXAMPLE
$params = @{
PesterConfigurationFile = 'C:\TestResults\PesterConfiguration.json'
ExcelFilePath = 'C:\TestResults\Tests.xlsx'
WorkSheetName = 'Tests'
}
& 'Pester test report.ps1' @params
# Content 'C:\TestResults\PesterConfiguration.json':
{
"Run": {
"Path": "C:\Scripts"
}
Executing the script with this configuration file will generate 1 file:
- 'C:\TestResults\Tests.xlsx' created by this script with Export-Excel
.EXAMPLE
$params = @{
PesterConfigurationFile = 'C:\TestResults\PesterConfiguration.json'
ExcelFilePath = 'C:\TestResults\Tests.xlsx'
WorkSheetName = 'Tests'
}
& 'Pester test report.ps1' @params
# Content 'C:\TestResults\PesterConfiguration.json':
{
"Run": {
"Path": "C:\Scripts"
},
"TestResult": {
"Enabled": true,
"OutputFormat": "NUnitXml",
"OutputPath": "C:/TestResults/PesterTestResults.xml",
"OutputEncoding": "UTF8"
}
}
Executing the script with this configuration file will generate 2 files:
- 'C:\TestResults\PesterTestResults.xml' created by Pester
- 'C:\TestResults\Tests.xlsx' created by this script with Export-Excel
.LINK
https://pester-docs.netlify.app/docs/commands/Invoke-Pester#-configuration
#>
[CmdletBinding()]
Param (
[String]$PesterConfigurationFile = 'PesterConfiguration.json',
[String]$WorkSheetName = 'PesterTestResults',
[String]$ExcelFilePath = 'PesterTestResults.xlsx'
)
Begin {
Function Get-PesterTests {
[CmdLetBinding()]
Param (
$Container
)
if ($testCaseResults = $Container.Tests) {
foreach ($result in $testCaseResults) {
Write-Verbose "Result '$($result.result)' duration '$($result.time)' name '$($result.name)'"
$result
}
}
if ($containerResults = $Container.Blocks) {
foreach ($result in $containerResults) {
Get-PesterTests -Container $result
}
}
}
#region Import Pester configuration file
Try {
Write-Verbose 'Import Pester configuration file'
$getParams = @{
Path = $PesterConfigurationFile
Raw = $true
}
[PesterConfiguration]$pesterConfiguration = Get-Content @getParams |
ConvertFrom-Json
}
Catch {
throw "Failed importing the Pester configuration file '$PesterConfigurationFile': $_"
}
#endregion
}
Process {
#region Execute Pester tests
Try {
Write-Verbose 'Execute Pester tests'
$pesterConfiguration.Run.PassThru = $true
$invokePesterParams = @{
Configuration = $pesterConfiguration
ErrorAction = 'Stop'
}
$invokePesterResult = Invoke-Pester @invokePesterParams
}
Catch {
throw "Failed to execute the Pester tests: $_ "
}
#endregion
#region Get Pester test results for the it clauses
$pesterTestResults = foreach (
$container in $invokePesterResult.Containers
) {
Get-PesterTests -Container $container |
Select-Object -Property *,
@{name = 'Container'; expression = { $container } }
}
#endregion
}
End {
if ($pesterTestResults) {
#region Export Pester test results to an Excel file
$exportExcelParams = @{
Path = $ExcelFilePath
WorksheetName = $WorkSheetName
ClearSheet = $true
PassThru = $true
BoldTopRow = $true
FreezeTopRow = $true
AutoSize = $true
AutoFilter = $true
AutoNameRange = $true
}
Write-Verbose "Export Pester test results to Excel file '$($exportExcelParams.Path)'"
$excel = $pesterTestResults | Select-Object -Property @{
name = 'FilePath'; expression = { $_.container.Item.FullName }
},
@{name = 'FileName'; expression = { $_.container.Item.Name } },
@{name = 'Path'; expression = { $_.ExpandedPath } },
@{name = 'Name'; expression = { $_.ExpandedName } },
@{name = 'Date'; expression = { $_.ExecutedAt } },
@{name = 'Time'; expression = { $_.ExecutedAt } },
Result,
Passed,
Skipped,
@{name = 'Duration'; expression = { $_.Duration.TotalSeconds } },
@{name = 'TotalDuration'; expression = { $_.container.Duration } },
@{name = 'Tag'; expression = { $_.Tag -join ', ' } },
@{name = 'Error'; expression = { $_.ErrorRecord -join ', ' } } |
Export-Excel @exportExcelParams
#endregion
#region Format the Excel worksheet
$ws = $excel.Workbook.Worksheets[$WorkSheetName]
# Display ExecutedAt in Date and Time format
Set-Column -Worksheet $ws -Column 5 -NumberFormat 'Short Date'
Set-Column -Worksheet $ws -Column 6 -NumberFormat 'hh:mm:ss'
# Display Duration in seconds with 3 decimals
Set-Column -Worksheet $ws -Column 10 -NumberFormat '0.000'
# Add comment to Duration column title
$comment = $ws.Cells['J1:J1'].AddComment('Total seconds', $env:USERNAME)
$comment.AutoFit = $true
# Set the width for column Path
$ws.Column(3) | Set-ExcelRange -Width 29
# Center the column titles
Set-ExcelRange -Address $ws.Row(1) -Bold -HorizontalAlignment Center
# Hide columns FilePath, Name, Passed and Skipped
(1, 4, 8, 9) | ForEach-Object {
Set-ExcelColumn -Worksheet $ws -Column $_ -Hide
}
# Set the color to red when 'Result' is 'Failed'
$endRow = $ws.Dimension.End.Row
$formattingParams = @{
Worksheet = $ws
range = "G2:L$endRow"
RuleType = 'ContainsText'
ConditionValue = "Failed"
BackgroundPattern = 'None'
ForegroundColor = 'Red'
Bold = $true
}
Add-ConditionalFormatting @formattingParams
# Set the color to green when 'Result' is 'Passed'
$endRow = $ws.Dimension.End.Row
$formattingParams = @{
Worksheet = $ws
range = "G2:L$endRow"
RuleType = 'ContainsText'
ConditionValue = "Passed"
BackgroundPattern = 'None'
ForegroundColor = 'Green'
}
Add-ConditionalFormatting @formattingParams
#endregion
#region Save the formatted Excel file
Close-ExcelPackage -ExcelPackage $excel
#endregion
}
else {
Write-Warning 'No Pester test results to export'
}
}

View File

@@ -0,0 +1,11 @@
{
"Run": {
"Path": "."
},
"TestResult": {
"Enabled": false,
"OutputFormat": "NUnitXml",
"OutputPath": "PesterTestResults.xml",
"OutputEncoding": "UTF8"
}
}

View File

@@ -1,5 +1,9 @@
$path = "$Env:TEMP\test.xlsx" try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
remove-item -path $path -ErrorAction SilentlyContinue
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
#Export some sales data to Excel, format it as a table and put a data-bar in. For this example we won't create the pivot table during the export #Export some sales data to Excel, format it as a table and put a data-bar in. For this example we won't create the pivot table during the export
$excel = ConvertFrom-Csv @" $excel = ConvertFrom-Csv @"
@@ -10,7 +14,7 @@ Banana, London , 300, 200
Orange, Paris, 600, 500 Orange, Paris, 600, 500
Banana, Paris, 300, 200 Banana, Paris, 300, 200
Apple, New York, 1200,700 Apple, New York, 1200,700
"@ | Export-Excel -PassThru -Path $path -TableStyle Medium13 -tablename "RawData" -ConditionalFormat @{Range="C2:C7"; DataBarColor="Green"} "@ | Export-Excel -PassThru -Path $xlSourcefile -TableStyle Medium13 -tablename "RawData" -ConditionalFormat @{Range="C2:C7"; DataBarColor="Green"}
#Add a pivot table, specify its address to put it on the same sheet, use the data that was just exported set the table style and number format. #Add a pivot table, specify its address to put it on the same sheet, use the data that was just exported set the table style and number format.
#Use the "City" for the row names, and "Product" for the columnnames, and sum both the gross and net values for each City/Product combination; add grand totals to rows and columns. #Use the "City" for the row names, and "Product" for the columnnames, and sum both the gross and net values for each City/Product combination; add grand totals to rows and columns.

View File

@@ -0,0 +1,52 @@
Function Import-Bycolumns {
Param(
[Parameter(Mandatory=$true)]
[OfficeOpenXml.ExcelPackage]$ExcelPackage,
[Int]$StartRow = 1,
[String]$WorksheetName,
[Int]$EndRow ,
[Int]$StartColumn = 1,
[Int]$EndColumn
)
Function Get-RowNames {
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = "Name would be incorrect, and command is not exported")]
param(
[Parameter(Mandatory)]
[Int[]]$Rows,
[Parameter(Mandatory)]
[Int]$StartColumn
)
foreach ($R in $Rows) {
#allow "False" or "0" to be headings
$Worksheet.Cells[$R, $StartColumn] | Where-Object {-not [string]::IsNullOrEmpty($_.Value) } | Select-Object @{N = 'Row'; E = { $R } }, Value
}
}
if (-not $WorksheetName) { $Worksheet = $ExcelPackage.Workbook.Worksheets[1] }
elseif (-not ($Worksheet = $ExcelPackage.Workbook.Worksheets[$WorkSheetName])) {
throw "Worksheet '$WorksheetName' not found, the workbook only contains the worksheets '$($ExcelPackage.Workbook.Worksheets)'. If you only wish to select the first worksheet, please remove the '-WorksheetName' parameter." ; return
}
if (-not $EndRow ) { $EndRow = $Worksheet.Dimension.End.Row }
if (-not $EndColumn) { $EndColumn = $Worksheet.Dimension.End.Column }
$Rows = $Startrow .. $EndRow ;
$Columns = (1 + $StartColumn)..$EndColumn
if ((-not $rows) -or (-not ($PropertyNames = Get-RowNames -Rows $Rows -StartColumn $StartColumn))) {
throw "No headers found in left coulmn '$Startcolumn'. "; return
}
if (-not $Columns) {
Write-Warning "Worksheet '$WorksheetName' in workbook contains no data in the rows after left column '$StartColumn'"
}
else {
foreach ($c in $Columns) {
$NewColumn = [Ordered]@{ }
foreach ($p in $PropertyNames) {
$NewColumn[$p.Value] = $Worksheet.Cells[$p.row,$c].text
}
[PSCustomObject]$NewColumn
}
}
}

View File

@@ -6,7 +6,7 @@
RootModule = 'ImportExcel.psm1' RootModule = 'ImportExcel.psm1'
# Version number of this module. # Version number of this module.
ModuleVersion = '7.1.0' ModuleVersion = '7.1.2'
# 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'
@@ -18,7 +18,7 @@
CompanyName = 'Doug Finke' CompanyName = 'Doug Finke'
# Copyright statement for this module # Copyright statement for this module
Copyright = 'c 2019 All rights reserved.' Copyright = 'c 2020 All rights reserved.'
# Description of the functionality provided by this module # Description of the functionality provided by this module
Description = @' Description = @'
@@ -51,8 +51,8 @@ Check out the How To Videos https://www.youtube.com/watch?v=U3Ne_yX4tYo&list=PL5
'Expand-NumberFormat', 'Expand-NumberFormat',
'Export-Excel', 'Export-Excel',
'Export-ExcelSheet', 'Export-ExcelSheet',
'Export-MultipleExcelSheets',
'Get-ExcelColumnName', 'Get-ExcelColumnName',
'Get-ExcelFileSummary',
'Get-ExcelSheetInfo', 'Get-ExcelSheetInfo',
'Get-ExcelWorkbookInfo', 'Get-ExcelWorkbookInfo',
'Get-HtmlTable', 'Get-HtmlTable',

View File

@@ -53,8 +53,8 @@ brew install mono-libgdiplus
"@ "@
Write-Warning -Message $msg Write-Warning -Message $msg
} }
}
finally { finally {
$ExcelPackage | Close-ExcelPackage -NoSave $ExcelPackage | Close-ExcelPackage -NoSave
} }
} }
}

View File

@@ -69,7 +69,7 @@
$Address = "$($Address.Row):$($Address.Row)" $Address = "$($Address.Row):$($Address.Row)"
} }
elseif ($Address -is [OfficeOpenXml.ExcelColumn]) { elseif ($Address -is [OfficeOpenXml.ExcelColumn]) {
$Address = (New-Object 'OfficeOpenXml.ExcelAddress' @(1, $address.ColumnMin, 1, $address.ColumnMax).Address) -replace '1','' $Address = (New-Object 'OfficeOpenXml.ExcelAddress' @(1, $address.ColumnMin, 1, $address.ColumnMax)).Address -replace '1',''
if ($Address -notmatch ':') {$Address = "$Address`:$Address"} if ($Address -notmatch ':') {$Address = "$Address`:$Address"}
} }
if ( $Address -is [string] -and $Address -match "!") {$Address = $Address -replace '^.*!',''} if ( $Address -is [string] -and $Address -match "!") {$Address = $Address -replace '^.*!',''}
@@ -87,7 +87,7 @@
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}
else {Write-Warning -Message "-Reverse was ignored because $ruletype does not support it."} else {Write-Warning -Message "-Reverse was ignored because $RuleType does not support it."}
} }
#endregion #endregion
#region set the rule conditions #region set the rule conditions

View File

@@ -11,7 +11,7 @@ function Add-ExcelName {
$ws = $Range.Worksheet $ws = $Range.Worksheet
if (-not $RangeName) { if (-not $RangeName) {
$RangeName = $ws.Cells[$Range.Start.Address].Value $RangeName = $ws.Cells[$Range.Start.Address].Value
$Range = ($Range.Worksheet.cells[($range.start.row +1), $range.start.Column , $range.end.row, $range.end.column]) $Range = ($Range.Worksheet.cells[($Range.start.row +1), $Range.start.Column , $Range.end.row, $Range.end.column])
} }
if ($RangeName -match '\W') { if ($RangeName -match '\W') {
Write-Warning -Message "Range name '$RangeName' contains illegal characters, they will be replaced with '_'." Write-Warning -Message "Range name '$RangeName' contains illegal characters, they will be replaced with '_'."

View File

@@ -7,7 +7,7 @@
[OfficeOpenXml.ExcelAddressBase] [OfficeOpenXml.ExcelAddressBase]
$Address, $Address,
$ExcelPackage, $ExcelPackage,
$SourceWorkSheet, $SourceWorksheet,
$SourceRange, $SourceRange,
$PivotRows, $PivotRows,
$PivotData, $PivotData,
@@ -75,11 +75,11 @@
if (-not $wsPivot.PivotTables[$pivotTableName] ) { if (-not $wsPivot.PivotTables[$pivotTableName] ) {
try { try {
#Accept a string or a worksheet object as $SourceWorksheet - we don't need a worksheet if we have a Rangebase . #Accept a string or a worksheet object as $SourceWorksheet - we don't need a worksheet if we have a Rangebase .
if ( $SourceWorkSheet -is [string]) { if ( $SourceWorksheet -is [string]) {
$SourceWorkSheet = $ExcelPackage.Workbook.Worksheets.where( {$_.name -Like $SourceWorkSheet})[0] $SourceWorksheet = $ExcelPackage.Workbook.Worksheets.where( {$_.name -Like $SourceWorksheet})[0]
} }
elseif ( $SourceWorkSheet -is [int] ) { elseif ( $SourceWorksheet -is [int] ) {
$SourceWorkSheet = $ExcelPackage.Workbook.Worksheets[$SourceWorkSheet] $SourceWorksheet = $ExcelPackage.Workbook.Worksheets[$SourceWorksheet]
} }
if ( $SourceRange -is [OfficeOpenXml.Table.ExcelTable]) {$SourceRange = $SourceRange.Address } if ( $SourceRange -is [OfficeOpenXml.Table.ExcelTable]) {$SourceRange = $SourceRange.Address }
if ( $sourceRange -is [OfficeOpenXml.ExcelRange] -or if ( $sourceRange -is [OfficeOpenXml.ExcelRange] -or
@@ -87,17 +87,17 @@
$pivotTable = $wsPivot.PivotTables.Add($Address, $SourceRange, $pivotTableName) $pivotTable = $wsPivot.PivotTables.Add($Address, $SourceRange, $pivotTableName)
} }
elseif (-not $SourceRange) { elseif (-not $SourceRange) {
$pivotTable = $wsPivot.PivotTables.Add($Address, $SourceWorkSheet.cells[$SourceWorkSheet.Dimension.Address], $pivotTableName) $pivotTable = $wsPivot.PivotTables.Add($Address, $SourceWorksheet.cells[$SourceWorksheet.Dimension.Address], $pivotTableName)
} }
elseif ($SourceWorkSheet -isnot [OfficeOpenXml.ExcelWorksheet] ) { elseif ($SourceWorksheet -isnot [OfficeOpenXml.ExcelWorksheet] ) {
Write-Warning -Message "Could not find source Worksheet for pivot-table '$pivotTableName'." ; return Write-Warning -Message "Could not find source Worksheet for pivot-table '$pivotTableName'." ; return
} }
elseif ( $SourceRange -is [String] -or $SourceRange -is [OfficeOpenXml.ExcelAddress]) { elseif ( $SourceRange -is [String] -or $SourceRange -is [OfficeOpenXml.ExcelAddress]) {
$pivotTable = $wsPivot.PivotTables.Add($Address, $SourceWorkSheet.Cells[$SourceRange], $pivotTableName) $pivotTable = $wsPivot.PivotTables.Add($Address, $SourceWorksheet.Cells[$SourceRange], $pivotTableName)
} }
else {Write-warning "Could not create a PivotTable with the Source Range provided."; return} else {Write-warning "Could not create a PivotTable with the Source Range provided."; return}
foreach ($Row in $PivotRows) { foreach ($row in $PivotRows) {
try {$null = $pivotTable.RowFields.Add($pivotTable.Fields[$Row]) } try {$null = $pivotTable.RowFields.Add($pivotTable.Fields[$row]) }
catch {Write-Warning -message "Could not add '$row' to Rows in PivotTable $pivotTableName." } catch {Write-Warning -message "Could not add '$row' to Rows in PivotTable $pivotTableName." }
} }
foreach ($Column in $PivotColumns) { foreach ($Column in $PivotColumns) {
@@ -150,8 +150,8 @@
else { else {
Write-Warning -Message "PivotTable defined in $($pivotTableName) already exists, only the data range will be changed." Write-Warning -Message "PivotTable defined in $($pivotTableName) already exists, only the data range will be changed."
$pivotTable = $wsPivot.PivotTables[$pivotTableName] $pivotTable = $wsPivot.PivotTables[$pivotTableName]
if (-not $SourceRange) { $SourceRange = $SourceWorkSheet.Dimension.Address} if (-not $SourceRange) { $SourceRange = $SourceWorksheet.Dimension.Address}
$pivotTable.CacheDefinition.SourceRange = $SourceWorkSheet.cells[$SourceRange] $pivotTable.CacheDefinition.SourceRange = $SourceWorksheet.cells[$SourceRange]
#change for epPlus 4.5 - Previously needed to hack the xml #change for epPlus 4.5 - Previously needed to hack the xml
# $pivotTable.CacheDefinition.CacheDefinitionXml.pivotCacheDefinition.cacheSource.worksheetSource.ref = $SourceRange # $pivotTable.CacheDefinition.CacheDefinitionXml.pivotCacheDefinition.cacheSource.worksheetSource.ref = $SourceRange

View File

@@ -4,7 +4,7 @@ function Add-Worksheet {
param( param(
[Parameter(Mandatory = $true, ValueFromPipeline = $true, ParameterSetName = "Package", Position = 0)] [Parameter(Mandatory = $true, ValueFromPipeline = $true, ParameterSetName = "Package", Position = 0)]
[OfficeOpenXml.ExcelPackage]$ExcelPackage, [OfficeOpenXml.ExcelPackage]$ExcelPackage,
[Parameter(Mandatory = $true, ParameterSetName = "WorkBook")] [Parameter(Mandatory = $true, ParameterSetName = "Workbook")]
[OfficeOpenXml.ExcelWorkbook]$ExcelWorkbook, [OfficeOpenXml.ExcelWorkbook]$ExcelWorkbook,
[string]$WorksheetName , [string]$WorksheetName ,
[switch]$ClearSheet, [switch]$ClearSheet,

View File

@@ -7,7 +7,7 @@
$Referencefile , $Referencefile ,
[parameter(Mandatory=$true,Position=1)] [parameter(Mandatory=$true,Position=1)]
$Differencefile , $Differencefile ,
$WorkSheetName = "Sheet1", $WorksheetName = "Sheet1",
$Property = "*" , $Property = "*" ,
$ExcludeProperty , $ExcludeProperty ,
[Parameter(ParameterSetName='B', Mandatory)] [Parameter(ParameterSetName='B', Mandatory)]
@@ -32,19 +32,19 @@
catch { Write-Warning -Message "Could not Resolve the filenames." ; return } catch { Write-Warning -Message "Could not Resolve the filenames." ; return }
#If we have one file , we must have two different worksheet names. If we have two files we can have a single string or two strings. #If we have one file , we must have two different worksheet names. If we have two files we can have a single string or two strings.
if ($onefile -and ( ($WorkSheetName.count -ne 2) -or $WorkSheetName[0] -eq $WorkSheetName[1] ) ) { if ($onefile -and ( ($WorksheetName.count -ne 2) -or $WorksheetName[0] -eq $WorksheetName[1] ) ) {
Write-Warning -Message "If both the Reference and difference file are the same then worksheet name must provide 2 different names" Write-Warning -Message "If both the Reference and difference file are the same then worksheet name must provide 2 different names"
return return
} }
if ($WorkSheetName.count -eq 2) {$worksheet1 = $WorkSheetName[0] ; $workSheet2 = $WorkSheetName[1]} if ($WorksheetName.count -eq 2) {$worksheet1 = $WorksheetName[0] ; $worksheet2 = $WorksheetName[1]}
elseif ($WorkSheetName -is [string]) {$worksheet1 = $workSheet2 = $WorkSheetName} elseif ($WorksheetName -is [string]) {$worksheet1 = $worksheet2 = $WorksheetName}
else {Write-Warning -Message "You must provide either a single worksheet name or two names." ; return } else {Write-Warning -Message "You must provide either a single worksheet name or two names." ; return }
$params= @{ ErrorAction = [System.Management.Automation.ActionPreference]::Stop } $params= @{ ErrorAction = [System.Management.Automation.ActionPreference]::Stop }
foreach ($p in @("HeaderName","NoHeader","StartRow")) {if ($PSBoundParameters[$p]) {$params[$p] = $PSBoundParameters[$p]}} foreach ($p in @("HeaderName","NoHeader","StartRow")) {if ($PSBoundParameters[$p]) {$params[$p] = $PSBoundParameters[$p]}}
try { try {
$sheet1 = Import-Excel -Path $Referencefile -WorksheetName $WorkSheet1 @params $sheet1 = Import-Excel -Path $Referencefile -WorksheetName $worksheet1 @params
$sheet2 = Import-Excel -Path $Differencefile -WorksheetName $WorkSheet2 @Params $sheet2 = Import-Excel -Path $Differencefile -WorksheetName $worksheet2 @Params
} }
catch {Write-Warning -Message "Could not read the worksheet from $Referencefile and/or $Differencefile." ; return } catch {Write-Warning -Message "Could not read the worksheet from $Referencefile and/or $Differencefile." ; return }
@@ -57,7 +57,7 @@
$propList = @() $propList = @()
foreach ($p in $Property) {$propList += ($headings.where({$_ -like $p}) )} foreach ($p in $Property) {$propList += ($headings.where({$_ -like $p}) )}
foreach ($p in $ExcludeProperty) {$propList = $propList.where({$_ -notlike $p}) } foreach ($p in $ExcludeProperty) {$propList = $propList.where({$_ -notlike $p}) }
if (($headings -contains $key) -and ($propList -notcontains $Key)) {$propList += $Key} if (($headings -contains $Key) -and ($propList -notcontains $Key)) {$propList += $Key}
$propList = $propList | Select-Object -Unique $propList = $propList | Select-Object -Unique
if ($propList.Count -eq 0) {Write-Warning -Message "No Columns are selected with -Property = '$Property' and -excludeProperty = '$ExcludeProperty'." ; return} if ($propList.Count -eq 0) {Write-Warning -Message "No Columns are selected with -Property = '$Property' and -excludeProperty = '$ExcludeProperty'." ; return}
@@ -106,7 +106,7 @@
} }
} }
#if font color was specified, set it on changed properties where the same key appears in both sheets. #if font color was specified, set it on changed properties where the same key appears in both sheets.
if ($diff -and $FontColor -and (($propList -contains $Key) -or ($key -is [hashtable])) ) { if ($diff -and $FontColor -and (($propList -contains $Key) -or ($Key -is [hashtable])) ) {
$updates = $diff.where({$_.SideIndicator -ne "=="}) | Group-object -Property $Key | Where-Object {$_.count -eq 2} $updates = $diff.where({$_.SideIndicator -ne "=="}) | Group-object -Property $Key | Where-Object {$_.count -eq 2}
if ($updates) { if ($updates) {
$XL1 = Open-ExcelPackage -path $Referencefile $XL1 = Open-ExcelPackage -path $Referencefile
@@ -135,28 +135,28 @@
elseif ($diff -and $FontColor) {Write-Warning -Message "To match rows to set changed cells, you must specify -Key and it must match one of the included properties." } elseif ($diff -and $FontColor) {Write-Warning -Message "To match rows to set changed cells, you must specify -Key and it must match one of the included properties." }
#if nothing was found write a message which will not be redirected #if nothing was found write a message which will not be redirected
if (-not $diff) {Write-Host "Comparison of $Referencefile::$worksheet1 and $Differencefile::$WorkSheet2 returned no results." } if (-not $diff) {Write-Host "Comparison of $Referencefile::$worksheet1 and $Differencefile::$worksheet2 returned no results." }
if ($Show) { if ($Show) {
Start-Process -FilePath $Referencefile Start-Process -FilePath $Referencefile
if (-not $oneFile) { Start-Process -FilePath $Differencefile } if (-not $oneFile) { Start-Process -FilePath $Differencefile }
if ($GridView) { Write-Warning -Message "-GridView is ignored when -Show is specified" } if ($GridView) { Write-Warning -Message "-GridView is ignored when -Show is specified" }
} }
elseif ($GridView -and $propList -contains $key) { elseif ($GridView -and $propList -contains $Key) {
if ($IncludeEqual -and -not $ExcludeDifferent) { if ($IncludeEqual -and -not $ExcludeDifferent) {
$GroupedRows = $diff | Group-Object -Property $key $GroupedRows = $diff | Group-Object -Property $Key
} }
else { #to get the right now numbers on the grid we need to have all the rows. else { #to get the right now numbers on the grid we need to have all the rows.
$GroupedRows = Compare-Object -ReferenceObject $Sheet1 -DifferenceObject $Sheet2 -Property $propList -PassThru -IncludeEqual | $GroupedRows = Compare-Object -ReferenceObject $Sheet1 -DifferenceObject $Sheet2 -Property $propList -PassThru -IncludeEqual |
Group-Object -Property $key Group-Object -Property $Key
} }
#Additions, deletions and unchanged rows will give a group of 1; changes will give a group of 2 . #Additions, deletions and unchanged rows will give a group of 1; changes will give a group of 2 .
#If one sheet has extra rows we can get a single "==" result from compare, but with the row from the reference sheet #If one sheet has extra rows we can get a single "==" result from compare, but with the row from the reference sheet
#but the row in the other sheet might so we will look up the row number from the key field build a hash table for that #but the row in the other sheet might so we will look up the row number from the key field build a hash table for that
$Sheet2 | ForEach-Object -Begin {$Rowhash = @{} } -Process {$Rowhash[$_.$key] = $_._row } $Sheet2 | ForEach-Object -Begin {$rowHash = @{} } -Process {$rowHash[$_.$Key] = $_._row }
$ExpandedDiff = ForEach ($g in $GroupedRows) { $ExpandedDiff = ForEach ($g in $GroupedRows) {
#we're going to create a custom object from a hash table. We want the fields to be ordered #we're going to create a custom object from a hash table. We want the fields to be ordered
@@ -168,11 +168,11 @@
#if we have already set the side, this is the second record, so set side to indicate "changed" #if we have already set the side, this is the second record, so set side to indicate "changed"
if ($hash.Side) {$hash.side = "<>"} else {$hash["Side"] = $result.sideindicator} if ($hash.Side) {$hash.side = "<>"} else {$hash["Side"] = $result.sideindicator}
#if result is "in reference" and we don't have a matching "in difference" (meaning a change) the lookup will be blank. Which we want. #if result is "in reference" and we don't have a matching "in difference" (meaning a change) the lookup will be blank. Which we want.
$hash[">Row"] = $Rowhash[$g.Name] $hash[">Row"] = $rowHash[$g.Name]
#position the key as the next field (only appears once) #position the key as the next field (only appears once)
$Hash[$key] = $g.Name $Hash[$Key] = $g.Name
#For all the other fields we care about create <=FieldName and/or =>FieldName #For all the other fields we care about create <=FieldName and/or =>FieldName
foreach ($p in $propList.Where({$_ -ne $key})) { foreach ($p in $propList.Where({$_ -ne $Key})) {
if ($result.SideIndicator -eq "==") {$hash[("=>$P")] = $hash[("<=$P")] =$result.$P} if ($result.SideIndicator -eq "==") {$hash[("=>$P")] = $hash[("<=$P")] =$result.$P}
else {$hash[($result.SideIndicator+$P)] =$result.$P} else {$hash[($result.SideIndicator+$P)] =$result.$P}
} }
@@ -191,7 +191,7 @@
if ( $ExcludeDifferent) {$ExpandedDiff = $ExpandedDiff.where({$_.side -eq "=="}) | Sort-Object -Property "<row" ,">row" } if ( $ExcludeDifferent) {$ExpandedDiff = $ExpandedDiff.where({$_.side -eq "=="}) | Sort-Object -Property "<row" ,">row" }
elseif ( $IncludeEqual) {$ExpandedDiff = $ExpandedDiff | Sort-Object -Property "<row" ,">row" } elseif ( $IncludeEqual) {$ExpandedDiff = $ExpandedDiff | Sort-Object -Property "<row" ,">row" }
else {$ExpandedDiff = $ExpandedDiff.where({$_.side -ne "=="}) | Sort-Object -Property "<row" ,">row" } else {$ExpandedDiff = $ExpandedDiff.where({$_.side -ne "=="}) | Sort-Object -Property "<row" ,">row" }
$ExpandedDiff | Update-FirstObjectProperties | Out-GridView -Title "Comparing $Referencefile::$worksheet1 (<=) with $Differencefile::$WorkSheet2 (=>)" $ExpandedDiff | Update-FirstObjectProperties | Out-GridView -Title "Comparing $Referencefile::$worksheet1 (<=) with $Differencefile::$worksheet2 (=>)"
} }
elseif ($GridView ) {Write-Warning -Message "To use -GridView you must specify -Key and it must match one of the included properties." } elseif ($GridView ) {Write-Warning -Message "To use -GridView you must specify -Key and it must match one of the included properties." }
elseif (-not $PassThru) {return ($diff | Select-Object -Property (@(@{n="_Side";e={$_.SideIndicator}},"_File" ,"_Sheet","_Row") + $propList))} elseif (-not $PassThru) {return ($diff | Select-Object -Property (@(@{n="_Side";e={$_.SideIndicator}},"_File" ,"_Sheet","_Row") + $propList))}

View File

@@ -3,56 +3,56 @@
param ( param (
[parameter(Mandatory=$true)] [parameter(Mandatory=$true)]
$Path, $Path,
$workSheetname = "Sheet1" , $WorksheetName = "Sheet1" ,
[parameter(Mandatory=$true)] [parameter(Mandatory=$true)]
$range, $Range,
$destination = "$pwd\temp.png", $Destination = "$pwd\temp.png",
[switch]$show [switch]$Show
) )
$extension = $destination -replace '^.*\.(\w+)$' ,'$1' $extension = $Destination -replace '^.*\.(\w+)$' ,'$1'
if ($extension -in @('JPEG','BMP','PNG')) { if ($extension -in @('JPEG','BMP','PNG')) {
$Format = [system.Drawing.Imaging.ImageFormat]$extension $Format = [system.Drawing.Imaging.ImageFormat]$extension
} #if we don't recognise the extension OR if it is JPG with an E, use JPEG format } #if we don't recognise the extension OR if it is JPG with an E, use JPEG format
else { $Format = [system.Drawing.Imaging.ImageFormat]::Jpeg} else { $Format = [system.Drawing.Imaging.ImageFormat]::Jpeg}
Write-Progress -Activity "Exporting $range of $workSheetname in $Path" -Status "Starting Excel" Write-Progress -Activity "Exporting $Range of $WorksheetName in $Path" -Status "Starting Excel"
$xlApp = New-Object -ComObject "Excel.Application" $xlApp = New-Object -ComObject "Excel.Application"
Write-Progress -Activity "Exporting $range of $workSheetname in $Path" -Status "Opening Workbook and copying data" Write-Progress -Activity "Exporting $Range of $WorksheetName in $Path" -Status "Opening Workbook and copying data"
$xlWbk = $xlApp.Workbooks.Open($Path) $xlWbk = $xlApp.Workbooks.Open($Path)
$xlWbk.Worksheets($workSheetname).Select() $xlWbk.Worksheets($WorksheetName).Select()
$null = $xlWbk.ActiveSheet.Range($range).Select() $null = $xlWbk.ActiveSheet.Range($Range).Select()
$null = $xlApp.Selection.Copy() $null = $xlApp.Selection.Copy()
Write-Progress -Activity "Exporting $range of $workSheetname in $Path" -Status "Saving copied data" Write-Progress -Activity "Exporting $Range of $WorksheetName in $Path" -Status "Saving copied data"
# Get-Clipboard came in with PS5. Older versions can use [System.Windows.Clipboard] but it is ugly. # Get-Clipboard came in with PS5. Older versions can use [System.Windows.Clipboard] but it is ugly.
$image = Get-Clipboard -Format Image $image = Get-Clipboard -Format Image
$image.Save($destination, $Format) $image.Save($Destination, $Format)
Write-Progress -Activity "Exporting $range of $workSheetname in $Path" -Status "Closing Excel" Write-Progress -Activity "Exporting $Range of $WorksheetName in $Path" -Status "Closing Excel"
$null = $xlWbk.ActiveSheet.Range("a1").Select() $null = $xlWbk.ActiveSheet.Range("a1").Select()
$null = $xlApp.Selection.Copy() $null = $xlApp.Selection.Copy()
$xlApp.Quit() $xlApp.Quit()
Write-Progress -Activity "Exporting $range of $workSheetname in $Path" -Completed Write-Progress -Activity "Exporting $Range of $WorksheetName in $Path" -Completed
if ($show) {Start-Process -FilePath $destination} if ($Show) {Start-Process -FilePath $Destination}
else {Get-Item -Path $destination} else {Get-Item -Path $Destination}
} }
<# <#
del demo*.xlsx del demo*.xlsx
$workSheetname = 'Processes' $worksheetName = 'Processes'
$Path = "$pwd\demo.xlsx" $Path = "$pwd\demo.xlsx"
$myData = Get-Process | Select-Object -Property Name,WS,CPU,Description,company,startTime $myData = Get-Process | Select-Object -Property Name,WS,CPU,Description,company,startTime
$excelPackage = $myData | Export-Excel -KillExcel -Path $Path -WorkSheetname $workSheetname -ClearSheet -AutoSize -AutoFilter -BoldTopRow -FreezeTopRow -PassThru $excelPackage = $myData | Export-Excel -KillExcel -Path $Path -WorksheetName $worksheetName -ClearSheet -AutoSize -AutoFilter -BoldTopRow -FreezeTopRow -PassThru
$workSheet = $excelPackage.Workbook.Worksheets[$workSheetname] $worksheet = $excelPackage.Workbook.Worksheets[$worksheetName]
$range = $workSheet.Dimension.Address $range = $worksheet.Dimension.Address
Set-ExcelRange -Worksheet $workSheet -Range "b:b" -NumberFormat "#,###" -AutoFit Set-ExcelRange -Worksheet $worksheet -Range "b:b" -NumberFormat "#,###" -AutoFit
Set-ExcelRange -Worksheet $workSheet -Range "C:C" -NumberFormat "#,##0.00" -AutoFit Set-ExcelRange -Worksheet $worksheet -Range "C:C" -NumberFormat "#,##0.00" -AutoFit
Set-ExcelRange -Worksheet $workSheet -Range "F:F" -NumberFormat "dd MMMM HH:mm:ss" -AutoFit Set-ExcelRange -Worksheet $worksheet -Range "F:F" -NumberFormat "dd MMMM HH:mm:ss" -AutoFit
Add-ConditionalFormatting -Worksheet $workSheet -Range "c2:c1000" -DataBarColor Blue Add-ConditionalFormatting -Worksheet $worksheet -Range "c2:c1000" -DataBarColor Blue
Add-ConditionalFormatting -Worksheet $workSheet -Range "b2:B1000" -RuleType GreaterThan -ConditionValue '104857600' -ForeGroundColor "Red" -Bold Add-ConditionalFormatting -Worksheet $worksheet -Range "b2:B1000" -RuleType GreaterThan -ConditionValue '104857600' -ForeGroundColor "Red" -Bold
Export-Excel -ExcelPackage $excelPackage -WorkSheetname $workSheetname Export-Excel -ExcelPackage $excelPackage -WorksheetName $worksheetName
Convert-ExcelRangeToImage -Path $Path -workSheetname $workSheetname -range $range -destination "$pwd\temp.png" -show Convert-ExcelRangeToImage -Path $Path -WorksheetName $worksheetName -range $range -destination "$pwd\temp.png" -show
#> #>
#Convert-ExcelRangeToImage -Path $Path -workSheetname $workSheetname -range $range -destination "$pwd\temp.png" -show #Convert-ExcelRangeToImage -Path $Path -WorksheetName $worksheetName -range $range -destination "$pwd\temp.png" -show

View File

@@ -5,16 +5,16 @@ function ConvertFrom-ExcelData {
[Parameter(ValueFromPipelineByPropertyName = $true, ValueFromPipeline = $true, Mandatory = $true)] [Parameter(ValueFromPipelineByPropertyName = $true, ValueFromPipeline = $true, Mandatory = $true)]
[ValidateScript( { Test-Path $_ -PathType Leaf })] [ValidateScript( { Test-Path $_ -PathType Leaf })]
$Path, $Path,
[ScriptBlock]$scriptBlock, [ScriptBlock]$ScriptBlock,
[Alias("Sheet")] [Alias("Sheet")]
$WorkSheetname = 1, $WorksheetName = 1,
[int]$HeaderRow = 1, [int]$HeaderRow = 1,
[string[]]$Header, [string[]]$Header,
[switch]$NoHeader, [switch]$NoHeader,
[switch]$DataOnly [switch]$DataOnly
) )
$null = $PSBoundParameters.Remove('scriptBlock') $null = $PSBoundParameters.Remove('ScriptBlock')
$params = @{} + $PSBoundParameters $params = @{} + $PSBoundParameters
$data = Import-Excel @params $data = Import-Excel @params
@@ -24,6 +24,6 @@ function ConvertFrom-ExcelData {
Select-Object -ExpandProperty name Select-Object -ExpandProperty name
foreach ($record in $data) { foreach ($record in $data) {
& $scriptBlock $PropertyNames $record & $ScriptBlock $PropertyNames $record
} }
} }

View File

@@ -8,7 +8,7 @@ function ConvertFrom-ExcelToSQLInsert {
[ValidateScript( { Test-Path $_ -PathType Leaf })] [ValidateScript( { Test-Path $_ -PathType Leaf })]
$Path, $Path,
[Alias("Sheet")] [Alias("Sheet")]
$WorkSheetname = 1, $WorksheetName = 1,
[Alias('HeaderRow', 'TopRow')] [Alias('HeaderRow', 'TopRow')]
[ValidateRange(1, 9999)] [ValidateRange(1, 9999)]
[Int]$StartRow, [Int]$StartRow,
@@ -16,12 +16,12 @@ function ConvertFrom-ExcelToSQLInsert {
[switch]$NoHeader, [switch]$NoHeader,
[switch]$DataOnly, [switch]$DataOnly,
[switch]$ConvertEmptyStringsToNull, [switch]$ConvertEmptyStringsToNull,
[switch]$UseMSSQLSyntax [switch]$UseMsSqlSyntax
) )
$null = $PSBoundParameters.Remove('TableName') $null = $PSBoundParameters.Remove('TableName')
$null = $PSBoundParameters.Remove('ConvertEmptyStringsToNull') $null = $PSBoundParameters.Remove('ConvertEmptyStringsToNull')
$null = $PSBoundParameters.Remove('UseMSSQLSyntax') $null = $PSBoundParameters.Remove('UseMsSqlSyntax')
$params = @{} + $PSBoundParameters $params = @{} + $PSBoundParameters
@@ -29,7 +29,7 @@ function ConvertFrom-ExcelToSQLInsert {
param($propertyNames, $record) param($propertyNames, $record)
$ColumnNames = "'" + ($PropertyNames -join "', '") + "'" $ColumnNames = "'" + ($PropertyNames -join "', '") + "'"
if($UseMSSQLSyntax) { if($UseMsSqlSyntax) {
$ColumnNames = "[" + ($PropertyNames -join "], [") + "]" $ColumnNames = "[" + ($PropertyNames -join "], [") + "]"
} }

View File

@@ -4,7 +4,7 @@
[Parameter(Mandatory = $true,ValueFromPipeline=$true)] [Parameter(Mandatory = $true,ValueFromPipeline=$true)]
[Alias('SourceWorkbook')] [Alias('SourceWorkbook')]
$SourceObject, $SourceObject,
$SourceWorkSheet = 1 , $SourceWorksheet = 1 ,
[Parameter(Mandatory = $true)] [Parameter(Mandatory = $true)]
$DestinationWorkbook, $DestinationWorkbook,
$DestinationWorksheet, $DestinationWorksheet,
@@ -39,7 +39,7 @@
return return
} }
else { else {
$null = Add-Worksheet -ExcelPackage $excel -WorkSheetname $DestinationWorksheet -CopySource ($excel.Workbook.Worksheets[$SourceWorkSheet]) $null = Add-Worksheet -ExcelPackage $excel -WorksheetName $DestinationWorksheet -CopySource ($excel.Workbook.Worksheets[$SourceWorksheet])
Close-ExcelPackage -ExcelPackage $excel -Show:$Show Close-ExcelPackage -ExcelPackage $excel -Show:$Show
return return
} }
@@ -47,15 +47,15 @@
} }
else { else {
if ($SourceObject -is [OfficeOpenXml.ExcelWorksheet]) {$sourceWs = $SourceObject} if ($SourceObject -is [OfficeOpenXml.ExcelWorksheet]) {$sourceWs = $SourceObject}
elseif ($SourceObject -is [OfficeOpenXml.ExcelWorkbook]) {$sourceWs = $SourceObject.Worksheets[$SourceWorkSheet]} elseif ($SourceObject -is [OfficeOpenXml.ExcelWorkbook]) {$sourceWs = $SourceObject.Worksheets[$SourceWorksheet]}
elseif ($SourceObject -is [OfficeOpenXml.ExcelPackage] ) {$sourceWs = $SourceObject.Workbook.Worksheets[$SourceWorkSheet]} elseif ($SourceObject -is [OfficeOpenXml.ExcelPackage] ) {$sourceWs = $SourceObject.Workbook.Worksheets[$SourceWorksheet]}
else { else {
$SourceObject = (Resolve-Path $SourceObject).ProviderPath $SourceObject = (Resolve-Path $SourceObject).ProviderPath
try { try {
Write-Verbose "Opening worksheet '$Worksheetname' in Excel workbook '$SourceObject'." Write-Verbose "Opening worksheet '$WorksheetName' in Excel workbook '$SourceObject'."
$stream = New-Object -TypeName System.IO.FileStream -ArgumentList $SourceObject, 'Open', 'Read' , 'ReadWrite' $stream = New-Object -TypeName System.IO.FileStream -ArgumentList $SourceObject, 'Open', 'Read' , 'ReadWrite'
$package1 = New-Object -TypeName OfficeOpenXml.ExcelPackage -ArgumentList $stream $package1 = New-Object -TypeName OfficeOpenXml.ExcelPackage -ArgumentList $stream
$sourceWs = $Package1.Workbook.Worksheets[$SourceWorkSheet] $sourceWs = $Package1.Workbook.Worksheets[$SourceWorksheet]
} }
catch {Write-Warning -Message "Could not open $SourceObject - the error was '$($_.exception.message)' " ; return} catch {Write-Warning -Message "Could not open $SourceObject - the error was '$($_.exception.message)' " ; return}
} }
@@ -76,7 +76,7 @@
$DestinationWorkbook.Worksheets.Delete($DestinationWorksheet) $DestinationWorkbook.Worksheets.Delete($DestinationWorksheet)
} }
Write-Verbose "Copying '$($sourcews.name)' from $($SourceObject) to '$($DestinationWorksheet)' in $($PSBoundParameters['DestinationWorkbook'])" Write-Verbose "Copying '$($sourcews.name)' from $($SourceObject) to '$($DestinationWorksheet)' in $($PSBoundParameters['DestinationWorkbook'])"
$null = Add-Worksheet -ExcelWorkbook $DestinationWorkbook -WorkSheetname $DestinationWorksheet -CopySource $sourceWs $null = Add-Worksheet -ExcelWorkbook $DestinationWorkbook -WorksheetName $DestinationWorksheet -CopySource $sourceWs
#Leave the destination open but close the source - if we're copying more than one sheet we'll re-open it and live with the inefficiency #Leave the destination open but close the source - if we're copying more than one sheet we'll re-open it and live with the inefficiency
if ($stream) {$stream.Close() } if ($stream) {$stream.Close() }
if ($package1) {Close-ExcelPackage -ExcelPackage $package1 -NoSave } if ($package1) {Close-ExcelPackage -ExcelPackage $package1 -NoSave }

View File

@@ -132,7 +132,7 @@
$WorksheetName = $ws.Name $WorksheetName = $ws.Name
} }
} }
catch {throw "Could not get worksheet $worksheetname"} catch {throw "Could not get worksheet $WorksheetName"}
try { try {
if ($Append -and $ws.Dimension) { if ($Append -and $ws.Dimension) {
#if there is a title or anything else above the header row, append needs to be combined wih a suitable startrow parameter #if there is a title or anything else above the header row, append needs to be combined wih a suitable startrow parameter
@@ -176,23 +176,23 @@
} }
elseif ($Title) { elseif ($Title) {
#Can only add a title if not appending! #Can only add a title if not appending!
$Row = $StartRow $row = $StartRow
$ws.Cells[$Row, $StartColumn].Value = $Title $ws.Cells[$row, $StartColumn].Value = $Title
$ws.Cells[$Row, $StartColumn].Style.Font.Size = $TitleSize $ws.Cells[$row, $StartColumn].Style.Font.Size = $TitleSize
if ($PSBoundParameters.ContainsKey("TitleBold")) { if ($PSBoundParameters.ContainsKey("TitleBold")) {
#Set title to Bold face font if -TitleBold was specified. #Set title to Bold face font if -TitleBold was specified.
#Otherwise the default will be unbolded. #Otherwise the default will be unbolded.
$ws.Cells[$Row, $StartColumn].Style.Font.Bold = [boolean]$TitleBold $ws.Cells[$row, $StartColumn].Style.Font.Bold = [boolean]$TitleBold
} }
if ($TitleBackgroundColor ) { if ($TitleBackgroundColor ) {
if ($TitleBackgroundColor -is [string]) {$TitleBackgroundColor = [System.Drawing.Color]::$TitleBackgroundColor } if ($TitleBackgroundColor -is [string]) {$TitleBackgroundColor = [System.Drawing.Color]::$TitleBackgroundColor }
$ws.Cells[$Row, $StartColumn].Style.Fill.PatternType = $TitleFillPattern $ws.Cells[$row, $StartColumn].Style.Fill.PatternType = $TitleFillPattern
$ws.Cells[$Row, $StartColumn].Style.Fill.BackgroundColor.SetColor($TitleBackgroundColor) $ws.Cells[$row, $StartColumn].Style.Fill.BackgroundColor.SetColor($TitleBackgroundColor)
} }
$Row ++ ; $startRow ++ $row ++ ; $startRow ++
} }
else { $Row = $StartRow } else { $row = $StartRow }
$ColumnIndex = $StartColumn $ColumnIndex = $StartColumn
$Numberformat = Expand-NumberFormat -NumberFormat $Numberformat $Numberformat = Expand-NumberFormat -NumberFormat $Numberformat
if ((-not $ws.Dimension) -and ($Numberformat -ne $ws.Cells.Style.Numberformat.Format)) { if ((-not $ws.Dimension) -and ($Numberformat -ne $ws.Cells.Style.Numberformat.Format)) {
@@ -278,20 +278,20 @@
foreach ($exclusion in $ExcludeProperty) {$script:Header = $script:Header -notlike $exclusion} foreach ($exclusion in $ExcludeProperty) {$script:Header = $script:Header -notlike $exclusion}
if ($NoHeader) { if ($NoHeader) {
# Don't push the headers to the spreadsheet # Don't push the headers to the spreadsheet
$Row -= 1 $row -= 1
} }
else { else {
$ColumnIndex = $StartColumn $ColumnIndex = $StartColumn
foreach ($Name in $script:Header) { foreach ($Name in $script:Header) {
$ws.Cells[$Row, $ColumnIndex].Value = $Name $ws.Cells[$row, $ColumnIndex].Value = $Name
Write-Verbose "Cell '$Row`:$ColumnIndex' add header '$Name'" Write-Verbose "Cell '$row`:$ColumnIndex' add header '$Name'"
$ColumnIndex += 1 $ColumnIndex += 1
} }
} }
} }
#endregion #endregion
#region Add non header values #region Add non header values
$Row += 1 $row += 1
$ColumnIndex = $StartColumn $ColumnIndex = $StartColumn
<# <#
For each item in the header OR for the Data item if this is a simple Type or data table : For each item in the header OR for the Data item if this is a simple Type or data table :
@@ -305,39 +305,39 @@
else {$v = $TargetData.$Name} else {$v = $TargetData.$Name}
try { try {
if ($v -is [DateTime]) { if ($v -is [DateTime]) {
$ws.Cells[$Row, $ColumnIndex].Value = $v $ws.Cells[$row, $ColumnIndex].Value = $v
$ws.Cells[$Row, $ColumnIndex].Style.Numberformat.Format = 'm/d/yy h:mm' # This is not a custom format, but a preset recognized as date and localized. $ws.Cells[$row, $ColumnIndex].Style.Numberformat.Format = 'm/d/yy h:mm' # This is not a custom format, but a preset recognized as date and localized.
} }
elseif ($v -is [TimeSpan]) { elseif ($v -is [TimeSpan]) {
$ws.Cells[$Row, $ColumnIndex].Value = $v $ws.Cells[$row, $ColumnIndex].Value = $v
$ws.Cells[$Row, $ColumnIndex].Style.Numberformat.Format = '[h]:mm:ss' $ws.Cells[$row, $ColumnIndex].Style.Numberformat.Format = '[h]:mm:ss'
} }
elseif ($v -is [System.ValueType]) { elseif ($v -is [System.ValueType]) {
$ws.Cells[$Row, $ColumnIndex].Value = $v $ws.Cells[$row, $ColumnIndex].Value = $v
if ($setNumformat) {$ws.Cells[$Row, $ColumnIndex].Style.Numberformat.Format = $Numberformat } if ($setNumformat) {$ws.Cells[$row, $ColumnIndex].Style.Numberformat.Format = $Numberformat }
} }
elseif ($v -is [uri] ) { elseif ($v -is [uri] ) {
$ws.Cells[$Row, $ColumnIndex].HyperLink = $v $ws.Cells[$row, $ColumnIndex].HyperLink = $v
$ws.Cells[$Row, $ColumnIndex].Style.Font.Color.SetColor([System.Drawing.Color]::Blue) $ws.Cells[$row, $ColumnIndex].Style.Font.Color.SetColor([System.Drawing.Color]::Blue)
$ws.Cells[$Row, $ColumnIndex].Style.Font.UnderLine = $true $ws.Cells[$row, $ColumnIndex].Style.Font.UnderLine = $true
} }
elseif ($v -isnot [String] ) { #Other objects or null. elseif ($v -isnot [String] ) { #Other objects or null.
if ($null -ne $v) { $ws.Cells[$Row, $ColumnIndex].Value = $v.toString()} if ($null -ne $v) { $ws.Cells[$row, $ColumnIndex].Value = $v.toString()}
} }
elseif ($v[0] -eq '=') { elseif ($v[0] -eq '=') {
$ws.Cells[$Row, $ColumnIndex].Formula = ($v -replace '^=','') $ws.Cells[$row, $ColumnIndex].Formula = ($v -replace '^=','')
if ($setNumformat) {$ws.Cells[$Row, $ColumnIndex].Style.Numberformat.Format = $Numberformat } if ($setNumformat) {$ws.Cells[$row, $ColumnIndex].Style.Numberformat.Format = $Numberformat }
} }
elseif ( [System.Uri]::IsWellFormedUriString($v , [System.UriKind]::Absolute) ) { elseif ( [System.Uri]::IsWellFormedUriString($v , [System.UriKind]::Absolute) ) {
if ($v -match "^xl://internal/") { if ($v -match "^xl://internal/") {
$referenceAddress = $v -replace "^xl://internal/" , "" $referenceAddress = $v -replace "^xl://internal/" , ""
$display = $referenceAddress -replace "!A1$" , "" $display = $referenceAddress -replace "!A1$" , ""
$h = New-Object -TypeName OfficeOpenXml.ExcelHyperLink -ArgumentList $referenceAddress , $display $h = New-Object -TypeName OfficeOpenXml.ExcelHyperLink -ArgumentList $referenceAddress , $display
$ws.Cells[$Row, $ColumnIndex].HyperLink = $h $ws.Cells[$row, $ColumnIndex].HyperLink = $h
} }
else {$ws.Cells[$Row, $ColumnIndex].HyperLink = $v } #$ws.Cells[$Row, $ColumnIndex].Value = $v.AbsoluteUri else {$ws.Cells[$row, $ColumnIndex].HyperLink = $v } #$ws.Cells[$row, $ColumnIndex].Value = $v.AbsoluteUri
$ws.Cells[$Row, $ColumnIndex].Style.Font.Color.SetColor([System.Drawing.Color]::Blue) $ws.Cells[$row, $ColumnIndex].Style.Font.Color.SetColor([System.Drawing.Color]::Blue)
$ws.Cells[$Row, $ColumnIndex].Style.Font.UnderLine = $true $ws.Cells[$row, $ColumnIndex].Style.Font.UnderLine = $true
} }
else { else {
$number = $null $number = $null
@@ -346,15 +346,15 @@
$NoNumberConversion -notcontains $Name -and $NoNumberConversion -notcontains $Name -and
[Double]::TryParse($v, [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::CurrentInfo, [Ref]$number) [Double]::TryParse($v, [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::CurrentInfo, [Ref]$number)
) { ) {
$ws.Cells[$Row, $ColumnIndex].Value = $number $ws.Cells[$row, $ColumnIndex].Value = $number
if ($setNumformat) {$ws.Cells[$Row, $ColumnIndex].Style.Numberformat.Format = $Numberformat } if ($setNumformat) {$ws.Cells[$row, $ColumnIndex].Style.Numberformat.Format = $Numberformat }
} }
else { else {
$ws.Cells[$Row, $ColumnIndex].Value = $v $ws.Cells[$row, $ColumnIndex].Value = $v
} }
} }
} }
catch {Write-Warning -Message "Could not insert the '$Name' property at Row $Row, Column $ColumnIndex"} catch {Write-Warning -Message "Could not insert the '$Name' property at Row $row, Column $ColumnIndex"}
$ColumnIndex += 1 $ColumnIndex += 1
} }
$ColumnIndex -= 1 # column index will be the last column whether isDataTypeValueType was true or false $ColumnIndex -= 1 # column index will be the last column whether isDataTypeValueType was true or false
@@ -371,7 +371,7 @@
$endAddress = $ws.Dimension.End.Address $endAddress = $ws.Dimension.End.Address
} }
else { else {
$LastRow = $Row $LastRow = $row
$LastCol = $ColumnIndex $LastCol = $ColumnIndex
$endAddress = [OfficeOpenXml.ExcelAddress]::GetAddress($LastRow , $LastCol) $endAddress = [OfficeOpenXml.ExcelAddress]::GetAddress($LastRow , $LastCol)
} }
@@ -435,8 +435,8 @@
$params = $item.value $params = $item.value
if ($Activate) {$params.Activate = $true } if ($Activate) {$params.Activate = $true }
if ($params.keys -notcontains 'SourceRange' -and if ($params.keys -notcontains 'SourceRange' -and
($params.Keys -notcontains 'SourceWorkSheet' -or $params.SourceWorkSheet -eq $WorksheetName)) {$params.SourceRange = $dataRange} ($params.Keys -notcontains 'SourceWorksheet' -or $params.SourceWorksheet -eq $WorksheetName)) {$params.SourceRange = $dataRange}
if ($params.Keys -notcontains 'SourceWorkSheet') {$params.SourceWorkSheet = $ws } if ($params.Keys -notcontains 'SourceWorksheet') {$params.SourceWorksheet = $ws }
if ($params.Keys -notcontains 'NoTotalsInPivot' -and $NoTotalsInPivot ) {$params.PivotTotals = 'None'} if ($params.Keys -notcontains 'NoTotalsInPivot' -and $NoTotalsInPivot ) {$params.PivotTotals = 'None'}
if ($params.Keys -notcontains 'PivotTotals' -and $PivotTotals ) {$params.PivotTotals = $PivotTotals} if ($params.Keys -notcontains 'PivotTotals' -and $PivotTotals ) {$params.PivotTotals = $PivotTotals}
if ($params.Keys -notcontains 'PivotDataToColumn' -and $PivotDataToColumn) {$params.PivotDataToColumn = $true} if ($params.Keys -notcontains 'PivotDataToColumn' -and $PivotDataToColumn) {$params.PivotDataToColumn = $true}
@@ -471,7 +471,7 @@
if ($ShowPercent) {$params.ShowPercent = $true} if ($ShowPercent) {$params.ShowPercent = $true}
if ($NoLegend) {$params.NoLegend = $true} if ($NoLegend) {$params.NoLegend = $true}
} }
Add-PivotTable -ExcelPackage $pkg -SourceWorkSheet $ws @params Add-PivotTable -ExcelPackage $pkg -SourceWorksheet $ws @params
} }
try { try {
@@ -544,7 +544,7 @@
foreach ($Sheet in $HideSheet) { foreach ($Sheet in $HideSheet) {
try { try {
$pkg.Workbook.WorkSheets.Where({$_.Name -like $sheet}) | ForEach-Object { $pkg.Workbook.Worksheets.Where({$_.Name -like $sheet}) | ForEach-Object {
$_.Hidden = 'Hidden' $_.Hidden = 'Hidden'
Write-verbose -Message "Sheet '$($_.Name)' Hidden." Write-verbose -Message "Sheet '$($_.Name)' Hidden."
} }
@@ -553,7 +553,7 @@
} }
foreach ($Sheet in $UnHideSheet) { foreach ($Sheet in $UnHideSheet) {
try { try {
$pkg.Workbook.WorkSheets.Where({$_.Name -like $sheet}) | ForEach-Object { $pkg.Workbook.Worksheets.Where({$_.Name -like $sheet}) | ForEach-Object {
$_.Hidden = 'Visible' $_.Hidden = 'Visible'
Write-verbose -Message "Sheet '$($_.Name)' shown" Write-verbose -Message "Sheet '$($_.Name)' shown"
} }

View File

@@ -1,120 +0,0 @@
---
external help file: ImportExcel-help.xml
Module Name: ImportExcel
online version: https://github.com/dfinke/ImportExcel
schema: 2.0.0
---
# Export-MultipleExcelSheets
## SYNOPSIS
{{ Fill in the Synopsis }}
## SYNTAX
```
Export-MultipleExcelSheets [-Path] <Object> [-InfoMap] <Hashtable> [[-Password] <String>] [-Show] [-AutoSize] [<CommonParameters>]
```
## DESCRIPTION
{{ Fill in the Description }}
## EXAMPLES
### Example 1
```powershell
PS C:\> {{ Add example code here }}
```
{{ Add example description here }}
## PARAMETERS
### -AutoSize
{{ Fill AutoSize Description }}
```yaml
Type: SwitchParameter
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -InfoMap
{{ Fill InfoMap Description }}
```yaml
Type: Hashtable
Parameter Sets: (All)
Aliases:
Required: True
Position: 1
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -Password
{{ Fill Password Description }}
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: False
Position: 2
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -Path
{{ Fill Path Description }}
```yaml
Type: Object
Parameter Sets: (All)
Aliases:
Required: True
Position: 0
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -Show
{{ Fill Show Description }}
```yaml
Type: SwitchParameter
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
## INPUTS
### None
## OUTPUTS
### System.Object
## NOTES
## RELATED LINKS

View File

@@ -1,28 +0,0 @@
function Export-MultipleExcelSheets {
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword", "")]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification="No suitable singular")]
param(
[Parameter(Mandatory = $true)]
$Path,
[Parameter(Mandatory = $true)]
[hashtable]$InfoMap,
[string]$Password,
[Switch]$Show,
[Switch]$AutoSize
)
$parameters = @{ } + $PSBoundParameters
$parameters.Remove("InfoMap")
$parameters.Remove("Show")
$parameters.Path = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($Path)
foreach ($entry in $InfoMap.GetEnumerator()) {
Write-Progress -Activity "Exporting" -Status "$($entry.Key)"
$parameters.WorkSheetname = $entry.Key
& $entry.Value | Export-Excel @parameters
}
if ($Show) { Invoke-Item $Path }
}

View File

@@ -1,11 +1,11 @@
function Get-ExcelColumnName { function Get-ExcelColumnName {
param( param(
[Parameter(ValueFromPipeline=$true)] [Parameter(ValueFromPipeline=$true)]
$columnNumber=1 $ColumnNumber=1
) )
Process { Process {
$dividend = $columnNumber $dividend = $ColumnNumber
$columnName = New-Object System.Collections.ArrayList($null) $columnName = New-Object System.Collections.ArrayList($null)
while($dividend -gt 0) { while($dividend -gt 0) {
@@ -19,7 +19,7 @@ function Get-ExcelColumnName {
} }
[PSCustomObject] @{ [PSCustomObject] @{
ColumnNumber = $columnNumber ColumnNumber = $ColumnNumber
ColumnName = $columnName -join '' ColumnName = $columnName -join ''
} }

View File

@@ -0,0 +1,28 @@
function Get-ExcelFileSummary {
<#
.Synopsis
Gets summary information on an Excel file like number of rows, columns, and more
#>
param(
[Parameter(ValueFromPipelineByPropertyName, Mandatory)]
[Alias('FullName')]
$Path
)
Process {
$excel = Open-ExcelPackage -Path $Path
foreach ($workSheet in $excel.Workbook.Worksheets) {
[PSCustomObject][Ordered]@{
ExcelFile = Split-Path -Leaf $Path
WorksheetName = $workSheet.Name
Rows = $workSheet.Dimension.Rows
Columns = $workSheet.Dimension.Columns
Address = $workSheet.Dimension.Address
Path = Split-Path $Path
}
}
Close-ExcelPackage -ExcelPackage $excel -NoSave
}
}

View File

@@ -3,16 +3,16 @@
function Get-HtmlTable { function Get-HtmlTable {
param( param(
[Parameter(Mandatory=$true)] [Parameter(Mandatory=$true)]
$url, $Url,
$tableIndex=0, $TableIndex=0,
$Header, $Header,
[int]$FirstDataRow=0, [int]$FirstDataRow=0,
[Switch]$UseDefaultCredentials [Switch]$UseDefaultCredentials
) )
$r = Invoke-WebRequest $url -UseDefaultCredentials: $UseDefaultCredentials $r = Invoke-WebRequest $Url -UseDefaultCredentials: $UseDefaultCredentials
$table = $r.ParsedHtml.getElementsByTagName("table")[$tableIndex] $table = $r.ParsedHtml.getElementsByTagName("table")[$TableIndex]
$propertyNames=$Header $propertyNames=$Header
$totalRows=@($table.rows).count $totalRows=@($table.rows).count

View File

@@ -1,5 +1,5 @@
function Get-Range { function Get-Range {
[CmdletBinding()] [CmdletBinding()]
param($start=0,$stop,$step=1) param($Start=0,$Stop,$Step=1)
for ($idx = $start; $idx -lt $stop; $idx+=$step) {$idx} for ($idx = $Start; $idx -lt $Stop; $idx+=$Step) {$idx}
} }

View File

@@ -1,57 +0,0 @@
---
external help file: ImportExcel-help.xml
Module Name: ImportExcel
online version: https://github.com/dfinke/ImportExcel
schema: 2.0.0
---
# Get-XYRange
## SYNOPSIS
{{ Fill in the Synopsis }}
## SYNTAX
```
Get-XYRange [[-targetData] <Object>]
```
## DESCRIPTION
{{ Fill in the Description }}
## EXAMPLES
### Example 1
```powershell
PS C:\> {{ Add example code here }}
```
{{ Add example description here }}
## PARAMETERS
### -targetData
{{ Fill targetData Description }}
```yaml
Type: Object
Parameter Sets: (All)
Aliases:
Required: False
Position: 0
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
## INPUTS
### None
## OUTPUTS
### System.Object
## NOTES
## RELATED LINKS

View File

@@ -1,8 +1,8 @@
function Get-XYRange { function Get-XYRange {
[CmdletBinding()] [CmdletBinding()]
param($targetData) param($TargetData)
$record = $targetData | Select-Object -First 1 $record = $TargetData | Select-Object -First 1
$p=$record.psobject.Properties.name $p=$record.psobject.Properties.name
$infer = for ($idx = 0; $idx -lt $p.Count; $idx++) { $infer = for ($idx = 0; $idx -lt $p.Count; $idx++) {

View File

@@ -115,7 +115,7 @@
try { try {
#Select worksheet #Select worksheet
if (-not $WorksheetName) { $Worksheet = $ExcelPackage.Workbook.Worksheets[1] } if (-not $WorksheetName) { $Worksheet = $ExcelPackage.Workbook.Worksheets[1] }
elseif (-not ($Worksheet = $ExcelPackage.Workbook.Worksheets[$WorkSheetName])) { elseif (-not ($Worksheet = $ExcelPackage.Workbook.Worksheets[$WorksheetName])) {
throw "Worksheet '$WorksheetName' not found, the workbook only contains the worksheets '$($ExcelPackage.Workbook.Worksheets)'. If you only wish to select the first worksheet, please remove the '-WorksheetName' parameter." ; return throw "Worksheet '$WorksheetName' not found, the workbook only contains the worksheets '$($ExcelPackage.Workbook.Worksheets)'. If you only wish to select the first worksheet, please remove the '-WorksheetName' parameter." ; return
} }
@@ -142,12 +142,12 @@
} }
else { else {
$Columns = $StartColumn .. $EndColumn ; if ($StartColumn -gt $EndColumn) { Write-Warning -Message "Selecting columns $StartColumn to $EndColumn might give odd results." } $Columns = $StartColumn .. $EndColumn ; if ($StartColumn -gt $EndColumn) { Write-Warning -Message "Selecting columns $StartColumn to $EndColumn might give odd results." }
if ($NoHeader) { $Rows = $StartRow..$EndRow ; if ($StartRow -gt $EndRow) { Write-Warning -Message "Selecting rows $StartRow to $EndRow might give odd results." } } if ($NoHeader) { $rows = $StartRow..$EndRow ; if ($StartRow -gt $EndRow) { Write-Warning -Message "Selecting rows $StartRow to $EndRow might give odd results." } }
elseif ($HeaderName) { $Rows = $StartRow..$EndRow } elseif ($HeaderName) { $rows = $StartRow..$EndRow }
else { else {
$Rows = (1 + $StartRow)..$EndRow $rows = (1 + $StartRow)..$EndRow
if ($StartRow -eq 1 -and $EndRow -eq 1) { if ($StartRow -eq 1 -and $EndRow -eq 1) {
$Rows = 0 $rows = 0
} }
} }
@@ -162,7 +162,7 @@
throw "Duplicate column headers found on row '$StartRow' in columns '$($Duplicates.Group.Column)'. Column headers must be unique, if this is not a requirement please use the '-NoHeader' or '-HeaderName' parameter."; return throw "Duplicate column headers found on row '$StartRow' in columns '$($Duplicates.Group.Column)'. Column headers must be unique, if this is not a requirement please use the '-NoHeader' or '-HeaderName' parameter."; return
} }
#endregion #endregion
if (-not $Rows) { if (-not $rows) {
Write-Warning "Worksheet '$WorksheetName' in workbook '$Path' contains no data in the rows after top row '$StartRow'" Write-Warning "Worksheet '$WorksheetName' in workbook '$Path' contains no data in the rows after top row '$StartRow'"
} }
else { else {
@@ -186,7 +186,7 @@
$TextColRegEx = New-Object -TypeName regex -ArgumentList $TextColExpression , 9 $TextColRegEx = New-Object -TypeName regex -ArgumentList $TextColExpression , 9
} }
else {$TextColRegEx = $null} else {$TextColRegEx = $null}
foreach ($R in $Rows) { foreach ($R in $rows) {
#Disabled write-verbose for speed #Disabled write-verbose for speed
# Write-Verbose "Import row '$R'" # Write-Verbose "Import row '$R'"
$NewRow = [Ordered]@{ } $NewRow = [Ordered]@{ }
@@ -213,7 +213,7 @@
#endregion #endregion
} }
} }
catch { throw "Failed importing the Excel workbook '$Path' with worksheet '$Worksheetname': $_"; return } catch { throw "Failed importing the Excel workbook '$Path' with worksheet '$WorksheetName': $_"; return }
finally { finally {
if ($Path) { $stream.close(); $ExcelPackage.Dispose() } if ($Path) { $stream.close(); $ExcelPackage.Dispose() }
} }

View File

@@ -2,8 +2,8 @@
function Import-Html { function Import-Html {
[CmdletBinding()] [CmdletBinding()]
param( param(
$url, $Url,
$index, $Index,
$Header, $Header,
[int]$FirstDataRow=0, [int]$FirstDataRow=0,
[Switch]$UseDefaultCredentials [Switch]$UseDefaultCredentials
@@ -14,7 +14,7 @@ function Import-Html {
Write-Verbose "Exporting to Excel file $($xlFile)" Write-Verbose "Exporting to Excel file $($xlFile)"
$data = Get-HtmlTable -url $url -tableIndex $index -Header $Header -FirstDataRow $FirstDataRow -UseDefaultCredentials: $UseDefaultCredentials $data = Get-HtmlTable -Url $Url -TableIndex $Index -Header $Header -FirstDataRow $FirstDataRow -UseDefaultCredentials: $UseDefaultCredentials
$data | Export-Excel $xlFile -Show -AutoSize $data | Export-Excel $xlFile -Show -AutoSize
} }

View File

@@ -1,17 +1,17 @@
function Invoke-Sum { function Invoke-Sum {
[CmdletBinding()] [CmdletBinding()]
param( param(
$data, $Data,
$dimension, $Dimension,
$measure $Measure
) )
if(!$measure) {$measure = $dimension} if(!$Measure) {$Measure = $Dimension}
$h=@{} $h=@{}
foreach ($item in $data){ foreach ($item in $Data){
$key=$item.$dimension $key=$item.$Dimension
if(!$key) {$key="[missing]"} if(!$key) {$key="[missing]"}
@@ -19,7 +19,7 @@ function Invoke-Sum {
$h.$key=[ordered]@{} $h.$key=[ordered]@{}
} }
foreach($m in $measure) { foreach($m in $Measure) {
$value = $item.$m $value = $item.$m
if($value -is [string] -or $value -is [System.Enum]) { if($value -is [string] -or $value -is [System.Enum]) {
$value = 1 $value = 1

View File

@@ -7,7 +7,7 @@
[Parameter(Mandatory = $true, ParameterSetName = "PackageDefault")] [Parameter(Mandatory = $true, ParameterSetName = "PackageDefault")]
[Parameter(Mandatory = $true, ParameterSetName = "PackageTable")] [Parameter(Mandatory = $true, ParameterSetName = "PackageTable")]
[OfficeOpenXml.ExcelPackage]$ExcelPackage, [OfficeOpenXml.ExcelPackage]$ExcelPackage,
$WorkSheetName = 'Combined', $WorksheetName = 'Combined',
[switch]$Clearsheet, [switch]$Clearsheet,
[switch]$NoHeader, [switch]$NoHeader,
[string]$FromLabel = "From" , [string]$FromLabel = "From" ,
@@ -55,10 +55,10 @@
) )
#region get target worksheet, select it and move it to the end. #region get target worksheet, select it and move it to the end.
if ($Path -and -not $ExcelPackage) {$ExcelPackage = Open-ExcelPackage -path $Path } if ($Path -and -not $ExcelPackage) {$ExcelPackage = Open-ExcelPackage -path $Path }
$destinationSheet = Add-Worksheet -ExcelPackage $ExcelPackage -WorkSheetname $WorkSheetName -ClearSheet:$Clearsheet $destinationSheet = Add-Worksheet -ExcelPackage $ExcelPackage -WorksheetName $WorksheetName -ClearSheet:$Clearsheet
foreach ($w in $ExcelPackage.Workbook.Worksheets) {$w.view.TabSelected = $false} foreach ($w in $ExcelPackage.Workbook.Worksheets) {$w.view.TabSelected = $false}
$destinationSheet.View.TabSelected = $true $destinationSheet.View.TabSelected = $true
$ExcelPackage.Workbook.Worksheets.MoveToEnd($WorkSheetName) $ExcelPackage.Workbook.Worksheets.MoveToEnd($WorksheetName)
#row to insert at will be 1 on a blank sheet and lastrow + 1 on populated one #row to insert at will be 1 on a blank sheet and lastrow + 1 on populated one
$row = (1 + $destinationSheet.Dimension.End.Row ) $row = (1 + $destinationSheet.Dimension.End.Row )
#endregion #endregion
@@ -123,7 +123,7 @@
'Title', 'TitleFillPattern', 'TitleBackgroundColor', 'TitleBold', 'TitleSize' | ForEach-Object {$null = $params.Remove($_)} 'Title', 'TitleFillPattern', 'TitleBackgroundColor', 'TitleBold', 'TitleSize' | ForEach-Object {$null = $params.Remove($_)}
if ($params.Keys.Count) { if ($params.Keys.Count) {
if ($Title) { $params.StartRow = 2} if ($Title) { $params.StartRow = 2}
$params.WorkSheetName = $WorkSheetName $params.WorksheetName = $WorksheetName
$params.ExcelPackage = $ExcelPackage $params.ExcelPackage = $ExcelPackage
Export-Excel @Params Export-Excel @Params
} }

View File

@@ -75,7 +75,7 @@
$orderByProperties = $merged[0].psobject.properties.where({$_.name -match "row$"}).name $orderByProperties = $merged[0].psobject.properties.where({$_.name -match "row$"}).name
Write-Progress -Activity "Merging sheets" -CurrentOperation "creating output sheet '$OutputSheetName' in $OutputFile" Write-Progress -Activity "Merging sheets" -CurrentOperation "creating output sheet '$OutputSheetName' in $OutputFile"
$excel = $merged | Sort-Object -Property $orderByProperties | $excel = $merged | Sort-Object -Property $orderByProperties |
Export-Excel -Path $OutputFile -Worksheetname $OutputSheetName -ClearSheet -BoldTopRow -AutoFilter -PassThru Export-Excel -Path $OutputFile -WorksheetName $OutputSheetName -ClearSheet -BoldTopRow -AutoFilter -PassThru
$sheet = $excel.Workbook.Worksheets[$OutputSheetName] $sheet = $excel.Workbook.Worksheets[$OutputSheetName]
#We will put in a conditional format for "if all the others are not flagged as 'same'" to mark rows where something is added, removed or changed #We will put in a conditional format for "if all the others are not flagged as 'same'" to mark rows where something is added, removed or changed
@@ -84,7 +84,7 @@
#All the 'difference' columns in the sheet are labeled with the file they came from, 'reference' columns need their #All the 'difference' columns in the sheet are labeled with the file they came from, 'reference' columns need their
#headers prefixed with the ref file name, $colnames is the basis of a regular expression to identify what should have $refPrefix appended #headers prefixed with the ref file name, $colnames is the basis of a regular expression to identify what should have $refPrefix appended
$colNames = @("^_Row$") $colNames = @("^_Row$")
if ($key -ne "*") if ($Key -ne "*")
{$colnames += "^$Key$"} {$colnames += "^$Key$"}
if ($filesToProcess.Count -ge 2) { if ($filesToProcess.Count -ge 2) {
$refPrefix = (Split-Path -Path $filestoProcess[0] -Leaf) -replace "\.xlsx$"," " $refPrefix = (Split-Path -Path $filestoProcess[0] -Leaf) -replace "\.xlsx$"," "

View File

@@ -122,8 +122,8 @@
foreach ($p in $Property) { $propList += ($headings.where({$_ -like $p}) )} foreach ($p in $Property) { $propList += ($headings.where({$_ -like $p}) )}
foreach ($p in $ExcludeProperty) { $propList = $propList.where({$_ -notlike $p}) } foreach ($p in $ExcludeProperty) { $propList = $propList.where({$_ -notlike $p}) }
if (($propList -notcontains $Key) -and if (($propList -notcontains $Key) -and
('*' -ne $Key)) { $propList += $Key} #If $key isn't one of the headings we will have bailed by now ('*' -ne $Key)) { $propList += $Key} #If $Key isn't one of the headings we will have bailed by now
$propList = $propList | Select-Object -Unique #so, prolist must contain at least $key if nothing else $propList = $propList | Select-Object -Unique #so, prolist must contain at least $Key if nothing else
#If key is "*" we treat it differently , and we will create a script property which concatenates all the Properties in $Proplist #If key is "*" we treat it differently , and we will create a script property which concatenates all the Properties in $Proplist
$ConCatblock = [scriptblock]::Create( ($proplist | ForEach-Object {'$this."' + $_ + '"'}) -join " + ") $ConCatblock = [scriptblock]::Create( ($proplist | ForEach-Object {'$this."' + $_ + '"'}) -join " + ")
@@ -131,12 +131,12 @@
#Build the list of the properties to output, in order. #Build the list of the properties to output, in order.
$diffpart = @() $diffpart = @()
$refpart = @() $refpart = @()
foreach ($p in $proplist.Where({$key -ne $_}) ) {$refPart += $p ; $diffPart += "$DiffPrefix $p" } foreach ($p in $proplist.Where({$Key -ne $_}) ) {$refPart += $p ; $diffPart += "$DiffPrefix $p" }
$lastRefColNo = $proplist.count $lastRefColNo = $proplist.count
$FirstDiffColNo = $lastRefColNo + 1 $FirstDiffColNo = $lastRefColNo + 1
if ($key -ne '*') { if ($Key -ne '*') {
$outputProps = @($key) + $refpart + $diffpart $outputProps = @($Key) + $refpart + $diffpart
#If we are using a single column as the key, don't duplicate it, so the last difference column will be A if there is one property, C if there are two, E if there are 3 #If we are using a single column as the key, don't duplicate it, so the last difference column will be A if there is one property, C if there are two, E if there are 3
$lastDiffColNo = (2 * $proplist.count) - 1 $lastDiffColNo = (2 * $proplist.count) - 1
} }
@@ -151,7 +151,7 @@
#the row in the other sheet might be different so we will look up the row number from the key field - build a hash table for that here #the row in the other sheet might be different so we will look up the row number from the key field - build a hash table for that here
#If we have "*" as the key ad the script property to concatenate the [selected] properties. #If we have "*" as the key ad the script property to concatenate the [selected] properties.
$Rowhash = @{} $rowHash = @{}
$rowNo = $firstDataRow $rowNo = $firstDataRow
foreach ($row in $ReferenceObject) { foreach ($row in $ReferenceObject) {
if ($null -eq $row._row) {Add-Member -InputObject $row -MemberType NoteProperty -Value ($rowNo ++) -Name "_Row" } if ($null -eq $row._row) {Add-Member -InputObject $row -MemberType NoteProperty -Value ($rowNo ++) -Name "_Row" }
@@ -163,23 +163,23 @@
Add-Member -InputObject $row -MemberType NoteProperty -Value $rowNo -Name "$DiffPrefix Row" -Force Add-Member -InputObject $row -MemberType NoteProperty -Value $rowNo -Name "$DiffPrefix Row" -Force
if ($Key -eq '*' ) { if ($Key -eq '*' ) {
Add-Member -InputObject $row -MemberType ScriptProperty -Value $ConCatblock -Name "_All" Add-Member -InputObject $row -MemberType ScriptProperty -Value $ConCatblock -Name "_All"
$Rowhash[$row._All] = $rowNo $rowHash[$row._All] = $rowNo
} }
else {$Rowhash[$row.$key] = $rowNo } else {$rowHash[$row.$Key] = $rowNo }
$rowNo ++ $rowNo ++
} }
if ($DifferenceObject.count -gt $Rowhash.Keys.Count) { if ($DifferenceObject.count -gt $rowHash.Keys.Count) {
Write-Warning -Message "Difference object has $($DifferenceObject.Count) rows; but only $($Rowhash.keys.count) unique keys" Write-Warning -Message "Difference object has $($DifferenceObject.Count) rows; but only $($rowHash.keys.count) unique keys"
} }
if ($Key -eq '*') {$key = "_ALL"} if ($Key -eq '*') {$Key = "_ALL"}
#endregion #endregion
#We need to know all the properties we've met on the objects we've diffed #We need to know all the properties we've met on the objects we've diffed
$eDiffProps = [ordered]@{} $eDiffProps = [ordered]@{}
#When we do a compare object changes will result in two rows so we group them and join them together. #When we do a compare object changes will result in two rows so we group them and join them together.
$expandedDiff = Compare-Object -ReferenceObject $ReferenceObject -DifferenceObject $DifferenceObject -Property $propList -PassThru -IncludeEqual | $expandedDiff = Compare-Object -ReferenceObject $ReferenceObject -DifferenceObject $DifferenceObject -Property $propList -PassThru -IncludeEqual |
Group-Object -Property $key | ForEach-Object { Group-Object -Property $Key | ForEach-Object {
#The value of the key column is the name of the Group. #The value of the key column is the name of the Group.
$keyval = $_.name $keyVal = $_.name
#we're going to create a custom object from a hash table. #we're going to create a custom object from a hash table.
$hash = [ordered]@{} $hash = [ordered]@{}
foreach ($result in $_.Group) { foreach ($result in $_.Group) {
@@ -187,7 +187,7 @@
elseif (-not $hash["$DiffPrefix Row"]) {$hash["_Row"] = "" } elseif (-not $hash["$DiffPrefix Row"]) {$hash["_Row"] = "" }
#if we have already set the side, this must be the second record, so set side to indicate "changed"; if we got two "Same" indicators we may have a classh of keys #if we have already set the side, this must be the second record, so set side to indicate "changed"; if we got two "Same" indicators we may have a classh of keys
if ($hash.Side) { if ($hash.Side) {
if ($hash.Side -eq $result.SideIndicator) {Write-Warning -Message "'$keyval' may be a duplicate."} if ($hash.Side -eq $result.SideIndicator) {Write-Warning -Message "'$keyVal' may be a duplicate."}
$hash.Side = "<>" $hash.Side = "<>"
} }
else {$hash["Side"] = $result.SideIndicator} else {$hash["Side"] = $result.SideIndicator}
@@ -204,10 +204,10 @@
'<=' { $hash["$DiffPrefix is"] = 'Removed'} '<=' { $hash["$DiffPrefix is"] = 'Removed'}
} }
#find the number of the row in the the "difference" object which has this key. If it is the object is only in the reference this will be blank. #find the number of the row in the the "difference" object which has this key. If it is the object is only in the reference this will be blank.
$hash["$DiffPrefix Row"] = $Rowhash[$keyval] $hash["$DiffPrefix Row"] = $rowHash[$keyVal]
$hash[$key] = $keyval $hash[$Key] = $keyVal
#Create FieldName and/or =>FieldName columns #Create FieldName and/or =>FieldName columns
foreach ($p in $result.psobject.Properties.name.where({$_ -ne $key -and $_ -ne "SideIndicator" -and $_ -ne "$DiffPrefix Row" })) { foreach ($p in $result.psobject.Properties.name.where({$_ -ne $Key -and $_ -ne "SideIndicator" -and $_ -ne "$DiffPrefix Row" })) {
if ($result.SideIndicator -eq "==" -and $p -in $propList) if ($result.SideIndicator -eq "==" -and $p -in $propList)
{$hash[("$p")] = $hash[("$DiffPrefix $p")] = $result.$P} {$hash[("$p")] = $hash[("$DiffPrefix $p")] = $result.$P}
elseif ($result.SideIndicator -eq "==" -or $result.SideIndicator -eq "<=") elseif ($result.SideIndicator -eq "==" -or $result.SideIndicator -eq "<=")
@@ -233,7 +233,7 @@
elseif ($PSCmdlet.ShouldProcess($OutputFile,"Write Output to Excel file")) { elseif ($PSCmdlet.ShouldProcess($OutputFile,"Write Output to Excel file")) {
$expandedDiff = $expandedDiff | Sort-Object -Property "_row", "$DiffPrefix Row" $expandedDiff = $expandedDiff | Sort-Object -Property "_row", "$DiffPrefix Row"
$xl = $expandedDiff | Select-Object -Property $OutputProps | Update-FirstObjectProperties | $xl = $expandedDiff | Select-Object -Property $OutputProps | Update-FirstObjectProperties |
Export-Excel -Path $OutputFile -Worksheetname $OutputSheetName -FreezeTopRow -BoldTopRow -AutoSize -AutoFilter -PassThru Export-Excel -Path $OutputFile -WorksheetName $OutputSheetName -FreezeTopRow -BoldTopRow -AutoSize -AutoFilter -PassThru
$ws = $xl.Workbook.Worksheets[$OutputSheetName] $ws = $xl.Workbook.Worksheets[$OutputSheetName]
for ($i = 0; $i -lt $expandedDiff.Count; $i++ ) { for ($i = 0; $i -lt $expandedDiff.Count; $i++ ) {
if ( $expandedDiff[$i].side -ne "==" ) { if ( $expandedDiff[$i].side -ne "==" ) {

View File

@@ -5,7 +5,7 @@ function New-PivotTableDefinition {
[Parameter(Mandatory)] [Parameter(Mandatory)]
[Alias("PivtoTableName")]#Previous typo - use alias to avoid breaking scripts [Alias("PivtoTableName")]#Previous typo - use alias to avoid breaking scripts
$PivotTableName, $PivotTableName,
$SourceWorkSheet, $SourceWorksheet,
$SourceRange, $SourceRange,
$PivotRows, $PivotRows,
[hashtable]$PivotData, [hashtable]$PivotData,

View File

@@ -9,7 +9,7 @@
[Parameter(ParameterSetName="ExistingSession", Mandatory=$true)] [Parameter(ParameterSetName="ExistingSession", Mandatory=$true)]
$Session, $Session,
[Parameter(ParameterSetName="SQLConnection", Mandatory=$true)] [Parameter(ParameterSetName="SQLConnection", Mandatory=$true)]
[switch]$MsSQLserver, [switch]$MsSqlServer,
[Parameter(ParameterSetName="SQLConnection")] [Parameter(ParameterSetName="SQLConnection")]
[String]$DataBase, [String]$DataBase,
[Parameter(ParameterSetName="SQLConnection", Mandatory=$true)] [Parameter(ParameterSetName="SQLConnection", Mandatory=$true)]
@@ -46,10 +46,10 @@
$null = $PSBoundParameters.Remove('AutoFilter') $null = $PSBoundParameters.Remove('AutoFilter')
} }
#endregion #endregion
#region if we were either given a session object or a connection string (& optionally -MSSQLServer) make sure we can connect #region if we were either given a session object or a connection string (& optionally -MsSqlServer) make sure we can connect
try { try {
#If we got -MSSQLServer, create a SQL connection, if we didn't but we got -Connection create an ODBC connection #If we got -MsSqlServer, create a SQL connection, if we didn't but we got -Connection create an ODBC connection
if ($MsSQLserver -and $Connection) { if ($MsSqlServer -and $Connection) {
if ($Connection -notmatch '=') {$Connection = "server=$Connection;trusted_connection=true;timeout=60"} if ($Connection -notmatch '=') {$Connection = "server=$Connection;trusted_connection=true;timeout=60"}
$Session = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList $Connection $Session = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList $Connection
if ($Session.State -ne 'Open') {$Session.Open()} if ($Session.State -ne 'Open') {$Session.Open()}
@@ -90,7 +90,7 @@
#endregion #endregion
#region send the table to Excel #region send the table to Excel
#remove parameters which relate to querying SQL, leaving the ones used by Export-Excel #remove parameters which relate to querying SQL, leaving the ones used by Export-Excel
'Connection' , 'Database' , 'Session' , 'MsSQLserver' , 'SQL' , 'DataTable' , 'QueryTimeout' , 'Force' | 'Connection' , 'Database' , 'Session' , 'MsSqlServer' , 'SQL' , 'DataTable' , 'QueryTimeout' , 'Force' |
ForEach-Object {$null = $PSBoundParameters.Remove($_) } ForEach-Object {$null = $PSBoundParameters.Remove($_) }
#if force was specified export even if there are no rows. If there are no columns, the query failed and export "null" if forced #if force was specified export even if there are no rows. If there are no columns, the query failed and export "null" if forced
if ($DataTable.Rows.Count) { if ($DataTable.Rows.Count) {

View File

@@ -8,7 +8,7 @@
[Parameter(ParameterSetName="Package",Mandatory=$true)] [Parameter(ParameterSetName="Package",Mandatory=$true)]
[OfficeOpenXml.ExcelPackage]$ExcelPackage, [OfficeOpenXml.ExcelPackage]$ExcelPackage,
[Parameter(ParameterSetName="Package")] [Parameter(ParameterSetName="Package")]
[String]$Worksheetname = "Sheet1", [String]$WorksheetName = "Sheet1",
[Parameter(ParameterSetName="sheet",Mandatory=$true)] [Parameter(ParameterSetName="sheet",Mandatory=$true)]
[OfficeOpenXml.ExcelWorksheet]$Worksheet, [OfficeOpenXml.ExcelWorksheet]$Worksheet,
[Parameter(ValueFromPipeline=$true)] [Parameter(ValueFromPipeline=$true)]
@@ -52,10 +52,10 @@
begin { begin {
#if we were passed a package object and a worksheet name , get the worksheet. #if we were passed a package object and a worksheet name , get the worksheet.
if ($ExcelPackage) { if ($ExcelPackage) {
if ($ExcelPackage.Workbook.Worksheets.Name -notcontains $Worksheetname) { if ($ExcelPackage.Workbook.Worksheets.Name -notcontains $WorksheetName) {
throw "The Workbook does not contain a sheet named '$Worksheetname'" throw "The Workbook does not contain a sheet named '$WorksheetName'"
} }
else {$Worksheet = $ExcelPackage.Workbook.Worksheets[$Worksheetname] } else {$Worksheet = $ExcelPackage.Workbook.Worksheets[$WorksheetName] }
} }
#In a script block to build a formula, we may want any of corners or the column name, #In a script block to build a formula, we may want any of corners or the column name,
@@ -66,7 +66,7 @@
$endRow = $Worksheet.Dimension.End.Row $endRow = $Worksheet.Dimension.End.Row
} }
process { process {
if ($null -eq $workSheet.Dimension) {Write-Warning "Can't format an empty worksheet."; return} if ($null -eq $Worksheet.Dimension) {Write-Warning "Can't format an empty worksheet."; return}
if ($Column -eq 0 ) {$Column = $endColumn + 1 } if ($Column -eq 0 ) {$Column = $endColumn + 1 }
$columnName = (New-Object 'OfficeOpenXml.ExcelCellAddress' @(1, $column)).Address -replace "1","" $columnName = (New-Object 'OfficeOpenXml.ExcelCellAddress' @(1, $column)).Address -replace "1",""
Write-Verbose -Message "Updating Column $columnName" Write-Verbose -Message "Updating Column $columnName"
@@ -120,7 +120,7 @@
Set-ExcelRange -Worksheet $Worksheet -Range $theRange @params Set-ExcelRange -Worksheet $Worksheet -Range $theRange @params
} }
#endregion #endregion
if ($PSBoundParameters.ContainsKey('Hide')) {$workSheet.Column($Column).Hidden = [bool]$Hide} if ($PSBoundParameters.ContainsKey('Hide')) {$Worksheet.Column($Column).Hidden = [bool]$Hide}
#return the new data if -passthru was specified. #return the new data if -passthru was specified.
if ($PassThru) { $Worksheet.Column($Column)} if ($PassThru) { $Worksheet.Column($Column)}
elseif ($ReturnRange) { $theRange} elseif ($ReturnRange) { $theRange}

View File

@@ -8,7 +8,7 @@
[Parameter(ParameterSetName="Package",Mandatory=$true)] [Parameter(ParameterSetName="Package",Mandatory=$true)]
[OfficeOpenXml.ExcelPackage]$ExcelPackage, [OfficeOpenXml.ExcelPackage]$ExcelPackage,
[Parameter(ParameterSetName="Package")] [Parameter(ParameterSetName="Package")]
$Worksheetname = "Sheet1", $WorksheetName = "Sheet1",
[Parameter(ParameterSetName="Sheet",Mandatory=$true)] [Parameter(ParameterSetName="Sheet",Mandatory=$true)]
[OfficeOpenXml.Excelworksheet] $Worksheet, [OfficeOpenXml.Excelworksheet] $Worksheet,
[Parameter(ValueFromPipeline = $true)] [Parameter(ValueFromPipeline = $true)]
@@ -53,10 +53,10 @@
begin { begin {
#if we were passed a package object and a worksheet name , get the worksheet. #if we were passed a package object and a worksheet name , get the worksheet.
if ($ExcelPackage) { if ($ExcelPackage) {
if ($ExcelPackage.Workbook.Worksheets.Name -notcontains $Worksheetname) { if ($ExcelPackage.Workbook.Worksheets.Name -notcontains $WorksheetName) {
throw "The Workbook does not contain a sheet named '$Worksheetname'" throw "The Workbook does not contain a sheet named '$WorksheetName'"
} }
else {$Worksheet = $ExcelPackage.Workbook.Worksheets[$Worksheetname] } else {$Worksheet = $ExcelPackage.Workbook.Worksheets[$WorksheetName] }
} }
#In a script block to build a formula, we may want any of corners or the columnname, #In a script block to build a formula, we may want any of corners or the columnname,
#if row and start column aren't specified assume first unused row, and first column #if row and start column aren't specified assume first unused row, and first column
@@ -66,7 +66,7 @@
$endRow = $Worksheet.Dimension.End.Row $endRow = $Worksheet.Dimension.End.Row
} }
process { process {
if ($null -eq $workSheet.Dimension) {Write-Warning "Can't format an empty worksheet."; return} if ($null -eq $Worksheet.Dimension) {Write-Warning "Can't format an empty worksheet."; return}
if ($Row -eq 0 ) {$Row = $endRow + 1 } if ($Row -eq 0 ) {$Row = $endRow + 1 }
Write-Verbose -Message "Updating Row $Row" Write-Verbose -Message "Updating Row $Row"
#Add a row label #Add a row label
@@ -117,7 +117,7 @@
Set-ExcelRange -Worksheet $Worksheet -Range $theRange @params Set-ExcelRange -Worksheet $Worksheet -Range $theRange @params
} }
#endregion #endregion
if ($PSBoundParameters.ContainsKey('Hide')) {$workSheet.Row($Row).Hidden = [bool]$Hide} if ($PSBoundParameters.ContainsKey('Hide')) {$Worksheet.Row($Row).Hidden = [bool]$Hide}
#return the new data if -passthru was specified. #return the new data if -passthru was specified.
if ($passThru) {$Worksheet.Row($Row)} if ($passThru) {$Worksheet.Row($Row)}
elseif ($ReturnRange) {$theRange} elseif ($ReturnRange) {$theRange}

897
README.md

File diff suppressed because it is too large Load Diff

74
SUMMARY.md Normal file
View File

@@ -0,0 +1,74 @@
# Table of contents
* [README](README.md)
* [InferData](inferdata/README.md)
* [Test-Boolean](inferdata/test-boolean.md)
* [Invoke-AllTests](inferdata/invoke-alltests.md)
* [Test-Integer](inferdata/test-integer.md)
* [Test-String](inferdata/test-string.md)
* [Test-Date](inferdata/test-date.md)
* [Test-Number](inferdata/test-number.md)
* [mdHelp](mdhelp/README.md)
* [en](mdhelp/en/README.md)
* [Expand-NumberFormat](mdhelp/en/expand-numberformat.md)
* [Open-ExcelPackage](mdhelp/en/open-excelpackage.md)
* [Add-ExcelChart](mdhelp/en/add-excelchart.md)
* [Copy-ExcelWorkSheet](mdhelp/en/copy-excelworksheet.md)
* [Set-ExcelRange](mdhelp/en/set-excelrange.md)
* [Import-Excel](mdhelp/en/import-excel.md)
* [Set-ExcelRow](mdhelp/en/set-excelrow.md)
* [Get-ExcelSheetInfo](mdhelp/en/get-excelsheetinfo.md)
* [New-PivotTableDefinition](mdhelp/en/new-pivottabledefinition.md)
* [Add-ExcelDataValidationRule](mdhelp/en/add-exceldatavalidationrule.md)
* [Join-Worksheet](mdhelp/en/join-worksheet.md)
* [New-ConditionalFormattingIconSet](mdhelp/en/new-conditionalformattingiconset.md)
* [Send-SQLDataToExcel](mdhelp/en/send-sqldatatoexcel.md)
* [Get-ExcelWorkbookInfo](mdhelp/en/get-excelworkbookinfo.md)
* [New-ConditionalText](mdhelp/en/new-conditionaltext.md)
* [Compare-WorkSheet](mdhelp/en/compare-worksheet.md)
* [New-ExcelChartDefinition](mdhelp/en/new-excelchartdefinition.md)
* [Remove-WorkSheet](mdhelp/en/remove-worksheet.md)
* [ConvertFrom-ExcelToSQLInsert](mdhelp/en/convertfrom-exceltosqlinsert.md)
* [Close-ExcelPackage](mdhelp/en/close-excelpackage.md)
* [Set-ExcelColumn](mdhelp/en/set-excelcolumn.md)
* [Add-WorkSheet](mdhelp/en/add-worksheet.md)
* [Add-ExcelTable](mdhelp/en/add-exceltable.md)
* [Convert-ExcelRangeToImage](mdhelp/en/convert-excelrangetoimage.md)
* [Add-ConditionalFormatting](mdhelp/en/add-conditionalformatting.md)
* [Update-FirstObjectProperties](mdhelp/en/update-firstobjectproperties.md)
* [Export-Excel](mdhelp/en/export-excel.md)
* [Select-Worksheet](mdhelp/en/select-worksheet.md)
* [Merge-Worksheet](mdhelp/en/merge-worksheet.md)
* [Merge-MultipleSheets](mdhelp/en/merge-multiplesheets.md)
* [Add-ExcelName](mdhelp/en/add-excelname.md)
* [ConvertFrom-ExcelSheet](mdhelp/en/convertfrom-excelsheet.md)
* [Add-PivotTable](mdhelp/en/add-pivottable.md)
* [Public](public/README.md)
* [Import-USPS](public/import-usps.md)
* [Get-Range](public/get-range.md)
* [Get-XYRange](public/get-xyrange.md)
* [Set-CellStyle](public/set-cellstyle.md)
* [Invoke-Sum](public/invoke-sum.md)
* [Get-ExcelColumnName](public/get-excelcolumnname.md)
* [Import-UPS](public/import-ups.md)
* [Set-WorksheetProtection](public/set-worksheetprotection.md)
* [New-Plot](public/new-plot.md)
* [Import-Html](public/import-html.md)
* [New-ExcelStyle](public/new-excelstyle.md)
* [ConvertFrom-ExcelData](public/convertfrom-exceldata.md)
* [ConvertTo-ExcelXlsx](public/convertto-excelxlsx.md)
* [New-PSItem](public/new-psitem.md)
* [Get-HtmlTable](public/get-htmltable.md)
* [Charting](charting/README.md)
* [LineChart](charting/linechart.md)
* [PieChart](charting/piechart.md)
* [ColumnChart](charting/columnchart.md)
* [BarChart](charting/barchart.md)
* [DoChart](charting/dochart.md)
* [Examples](examples/README.md)
* [Untitled](examples/untitled.md)
* [Charts](examples/charts/README.md)
* [Multiplecharts](examples/charts/multiplecharts.md)
* [Pivot](pivot/README.md)
* [Pivot](pivot/pivot.md)

View File

@@ -12,6 +12,9 @@ Describe "Compare Worksheet" {
} }
} }
else { Add-Type -AssemblyName System.Windows.Forms } #> else { Add-Type -AssemblyName System.Windows.Forms } #>
if (-not (Get-command Get-Service -ErrorAction SilentlyContinue)) {
Function Get-Service {Import-Clixml $PSScriptRoot\Mockservices.xml}
}
. "$PSScriptRoot\Samples\Samples.ps1" . "$PSScriptRoot\Samples\Samples.ps1"
Remove-Item -Path "TestDrive:\server*.xlsx" Remove-Item -Path "TestDrive:\server*.xlsx"
[System.Collections.ArrayList]$s = Get-Service | Select-Object -first 25 -Property Name, RequiredServices, CanPauseAndContinue, CanShutdown, CanStop, DisplayName, DependentServices, MachineName [System.Collections.ArrayList]$s = Get-Service | Select-Object -first 25 -Property Name, RequiredServices, CanPauseAndContinue, CanShutdown, CanStop, DisplayName, DependentServices, MachineName
@@ -196,6 +199,9 @@ Describe "Compare Worksheet" {
Describe "Merge Worksheet" { Describe "Merge Worksheet" {
BeforeAll { BeforeAll {
if (-not (Get-command Get-Service -ErrorAction SilentlyContinue)) {
Function Get-Service {Import-Clixml $PSScriptRoot\Mockservices.xml}
}
Remove-Item -Path "TestDrive:\server*.xlsx" , "TestDrive:\combined*.xlsx" -ErrorAction SilentlyContinue Remove-Item -Path "TestDrive:\server*.xlsx" , "TestDrive:\combined*.xlsx" -ErrorAction SilentlyContinue
[System.Collections.ArrayList]$s = Get-service | Select-Object -first 25 -Property * [System.Collections.ArrayList]$s = Get-service | Select-Object -first 25 -Property *
@@ -261,6 +267,11 @@ Describe "Merge Worksheet" {
} }
} }
Describe "Merge Multiple sheets" { Describe "Merge Multiple sheets" {
BeforeAll {
if (-not (Get-command Get-Service -ErrorAction SilentlyContinue)) {
Function Get-Service {Import-Clixml $PSScriptRoot\Mockservices.xml}
}
}
Context "Merge 3 sheets with 3 properties" { Context "Merge 3 sheets with 3 properties" {
BeforeAll { BeforeAll {
Remove-Item -Path "TestDrive:\server*.xlsx" , "TestDrive:\combined*.xlsx" -ErrorAction SilentlyContinue Remove-Item -Path "TestDrive:\server*.xlsx" , "TestDrive:\combined*.xlsx" -ErrorAction SilentlyContinue

View File

@@ -1,19 +1,18 @@
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments','',Justification='False Positives')]
$scriptPath = Split-Path -Path $MyInvocation.MyCommand.path -Parent
$dataPath = Join-Path -Path $scriptPath -ChildPath "First10Races.xlsx"
$Outpath = "TestDrive:\"
Describe 'ConvertFrom-ExcelSheet / Export-ExcelSheet' { Describe 'ConvertFrom-ExcelSheet / Export-ExcelSheet' {
BeforeAll { BeforeAll {
$scriptPath = $PSScriptRoot
$dataPath = Join-Path -Path $scriptPath -ChildPath "First10Races.xlsx"
$Outpath = "TestDrive:\"
ConvertFrom-ExcelSheet -Path $dataPath -OutputPath $Outpath ConvertFrom-ExcelSheet -Path $dataPath -OutputPath $Outpath
$firstText = Get-Content (Join-path -Path $Outpath -ChildPath "First10Races.csv") $script:firstText = Get-Content (Join-path -Path $Outpath -ChildPath "First10Races.csv")
ConvertFrom-ExcelSheet -Path $dataPath -OutputPath $Outpath -AsText GridPosition, date ConvertFrom-ExcelSheet -Path $dataPath -OutputPath $Outpath -AsText GridPosition, date
$SecondText = Get-Content (Join-path -Path $Outpath -ChildPath "First10Races.csv") $script:SecondText = Get-Content (Join-path -Path $Outpath -ChildPath "First10Races.csv")
ConvertFrom-ExcelSheet -Path $dataPath -OutputPath $Outpath -AsText "GridPosition" -Property driver, ConvertFrom-ExcelSheet -Path $dataPath -OutputPath $Outpath -AsText "GridPosition" -Property driver,
@{n = "date"; e = { [datetime]::FromOADate($_.Date).tostring("#MM/dd/yyyy#") } } , FinishPosition, GridPosition @{n = "date"; e = { [datetime]::FromOADate($_.Date).tostring("#MM/dd/yyyy#") } } , FinishPosition, GridPosition
$ThirdText = Get-Content (Join-path -Path $Outpath -ChildPath "First10Races.csv") $script:ThirdText = Get-Content (Join-path -Path $Outpath -ChildPath "First10Races.csv")
ConvertFrom-ExcelSheet -Path $dataPath -OutputPath $Outpath -AsDate "date" ConvertFrom-ExcelSheet -Path $dataPath -OutputPath $Outpath -AsDate "date"
$FourthText = Get-Content (Join-path -Path $Outpath -ChildPath "First10Races.csv") $script:FourthText = Get-Content (Join-path -Path $Outpath -ChildPath "First10Races.csv")
} }
Context "Exporting to CSV" { Context "Exporting to CSV" {
it "Exported the expected columns to a CSV file " { it "Exported the expected columns to a CSV file " {

View File

@@ -1,9 +1,11 @@
if (-not (Get-command Import-Excel -ErrorAction SilentlyContinue)) { if (-not (Get-command Import-Excel -ErrorAction SilentlyContinue)) {
Import-Module $PSScriptRoot\..\ImportExcel.psd1 Import-Module $PSScriptRoot\..\ImportExcel.psd1
} }
$xlFile = "TestDrive:\testSQL.xlsx"
Describe "ConvertFrom-ExcelToSQLInsert" { Describe "ConvertFrom-ExcelToSQLInsert" {
BeforeAll {
$script:xlFile = "TestDrive:\testSQL.xlsx"
}
BeforeEach { BeforeEach {

View File

@@ -2,6 +2,7 @@
param() param()
Describe "Copy-Worksheet" { Describe "Copy-Worksheet" {
BeforeAll {
$path1 = "TestDrive:\Test1.xlsx" $path1 = "TestDrive:\Test1.xlsx"
$path2 = "TestDrive:\Test2.xlsx" $path2 = "TestDrive:\Test2.xlsx"
Remove-Item -Path $path1, $path2 -ErrorAction SilentlyContinue Remove-Item -Path $path1, $path2 -ErrorAction SilentlyContinue
@@ -34,8 +35,12 @@ Describe "Copy-Worksheet" {
Link1 = [uri]"https://github.com/dfinke/ImportExcel" Link1 = [uri]"https://github.com/dfinke/ImportExcel"
Link2 = "https://github.com/dfinke/ImportExcel" # Links are not copied correctly, hopefully this will be fixed at some future date Link2 = "https://github.com/dfinke/ImportExcel" # Links are not copied correctly, hopefully this will be fixed at some future date
} | Export-Excel -NoNumberConversion IPAddress, StrLeadZero, StrAltPhone2 -WorkSheetname MixedTypes -Path $path2 } | Export-Excel -NoNumberConversion IPAddress, StrLeadZero, StrAltPhone2 -WorkSheetname MixedTypes -Path $path2
}
Context "Simplest copy" { Context "Simplest copy" {
BeforeAll { BeforeAll {
$path1 = "TestDrive:\Test1.xlsx"
$path2 = "TestDrive:\Test2.xlsx"
Copy-ExcelWorksheet -SourceWorkbook $path1 -DestinationWorkbook $path2 Copy-ExcelWorksheet -SourceWorkbook $path1 -DestinationWorkbook $path2
$excel = Open-ExcelPackage -Path $path2 $excel = Open-ExcelPackage -Path $path2
$ws = $excel.Workbook.Worksheets["Processes"] $ws = $excel.Workbook.Worksheets["Processes"]
@@ -48,6 +53,7 @@ Describe "Copy-Worksheet" {
} }
Context "Mixed types using a package object" { Context "Mixed types using a package object" {
BeforeAll { BeforeAll {
$excel = Open-ExcelPackage -Path $path2
Copy-ExcelWorksheet -SourceWorkbook $excel -DestinationWorkbook $excel -DestinationWorkSheet "CopyOfMixedTypes" Copy-ExcelWorksheet -SourceWorkbook $excel -DestinationWorkbook $excel -DestinationWorkSheet "CopyOfMixedTypes"
Close-ExcelPackage -ExcelPackage $excel Close-ExcelPackage -ExcelPackage $excel
$excel = Open-ExcelPackage -Path $path2 $excel = Open-ExcelPackage -Path $path2

View File

@@ -1,14 +1,15 @@
#Requires -Modules Pester #Requires -Modules Pester
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidAssignmentToAutomaticVariable", "", Justification='Sets IsWindows on pre-6.0 only')]
[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')]
param() param()
if (-not (Get-command Import-Excel -ErrorAction SilentlyContinue)) { Describe ExportExcel -Tag "ExportExcel" {
Import-Module $PSScriptRoot\..\ImportExcel.psd1 BeforeAll {
}
if ($null -eq $IsWindows) { $IsWindows = [environment]::OSVersion.Platform -like "win*" } if ($null -eq $IsWindows) { $IsWindows = [environment]::OSVersion.Platform -like "win*" }
$WarningAction = "SilentlyContinue" $WarningAction = "SilentlyContinue"
Describe ExportExcel {
. "$PSScriptRoot\Samples\Samples.ps1" . "$PSScriptRoot\Samples\Samples.ps1"
if (-not (Get-command Get-Service -ErrorAction SilentlyContinue)) {
Function Get-Service {Import-Clixml $PSScriptRoot\Mockservices.xml}
}
if (Get-process -Name Excel, xlim -ErrorAction SilentlyContinue) { if (Get-process -Name Excel, xlim -ErrorAction SilentlyContinue) {
It "Excel is open" { It "Excel is open" {
$Warning = "You need to close Excel before running the tests." $Warning = "You need to close Excel before running the tests."
@@ -17,8 +18,9 @@ Describe ExportExcel {
} }
return return
} }
}
Context "#Example 1 # Creates and opens a file with the right number of rows and columns" { Context "#Example 1 # Creates and opens a file with the right number of rows and columns" {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue Remove-item -Path $path -ErrorAction SilentlyContinue
#Test with a maximum of 100 processes for speed; export all properties, then export smaller subsets. #Test with a maximum of 100 processes for speed; export all properties, then export smaller subsets.
@@ -26,20 +28,21 @@ Describe ExportExcel {
$propertyNames = $Processes[0].psobject.properties.name $propertyNames = $Processes[0].psobject.properties.name
$rowcount = $Processes.Count $rowcount = $Processes.Count
$Processes | Export-Excel $path #-show $Processes | Export-Excel $path #-show
}
BeforeEach {
#Open-ExcelPackage with -Create is tested in Export-Excel
#This is a test of using it with -KillExcel
#TODO Need to test opening pre-existing file with no -create switch (and graceful failure when file does not exist) somewhere else
$Excel = Open-ExcelPackage -Path $path -KillExcel
$ws = $Excel.Workbook.Worksheets[1]
$headingNames = $ws.cells["1:1"].Value
}
it "Created a new file " { it "Created a new file " {
Test-Path -Path $path -ErrorAction SilentlyContinue | Should -Be $true Test-Path -Path $path -ErrorAction SilentlyContinue | Should -Be $true
} }
# it "Started Excel to display the file " {
# Get-process -Name Excel, xlim -ErrorAction SilentlyContinue | Should -Not -BeNullOrEmpty
# }
#Start-Sleep -Seconds 5 ;
#Open-ExcelPackage with -Create is tested in Export-Excel
#This is a test of using it with -KillExcel
#TODO Need to test opening pre-existing file with no -create switch (and graceful failure when file does not exist) somewhere else
$Excel = Open-ExcelPackage -Path $path -KillExcel
it "Killed Excel when Open-Excelpackage was told to " { it "Killed Excel when Open-Excelpackage was told to " {
Get-process -Name Excel, xlim -ErrorAction SilentlyContinue | Should -BeNullOrEmpty Get-process -Name Excel, xlim -ErrorAction SilentlyContinue | Should -BeNullOrEmpty
} }
@@ -53,14 +56,12 @@ Describe ExportExcel {
$Excel.Sheet1 | Should -Not -BeNullOrEmpty $Excel.Sheet1 | Should -Not -BeNullOrEmpty
} }
$ws = $Excel.Workbook.Worksheets[1]
it "Created the worksheet with the expected name, number of rows and number of columns " { it "Created the worksheet with the expected name, number of rows and number of columns " {
$ws.Name | Should -Be "sheet1" $ws.Name | Should -Be "sheet1"
$ws.Dimension.Columns | Should -Be $propertyNames.Count $ws.Dimension.Columns | Should -Be $propertyNames.Count
$ws.Dimension.Rows | Should -Be ($rowcount + 1) $ws.Dimension.Rows | Should -Be ($rowcount + 1)
} }
$headingNames = $ws.cells["1:1"].Value
it "Created the worksheet with the correct header names " { it "Created the worksheet with the correct header names " {
foreach ($p in $propertyNames) { foreach ($p in $propertyNames) {
$headingnames -contains $p | Should -Be $true $headingnames -contains $p | Should -Be $true
@@ -81,6 +82,7 @@ Describe ExportExcel {
} }
Context " # NoAliasOrScriptPropeties -ExcludeProperty and -DisplayPropertySet work" { Context " # NoAliasOrScriptPropeties -ExcludeProperty and -DisplayPropertySet work" {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue Remove-item -Path $path -ErrorAction SilentlyContinue
$processes = Get-Process | Select-Object -First 100 $processes = Get-Process | Select-Object -First 100
@@ -108,12 +110,15 @@ Describe ExportExcel {
$Excel = Open-ExcelPackage -Path $path $Excel = Open-ExcelPackage -Path $path
$ws = $Excel.Workbook.Worksheets[1] $ws = $Excel.Workbook.Worksheets[1]
}
it "Created a new file with further properties excluded and cleared the old sheet " { it "Created a new file with further properties excluded and cleared the old sheet " {
$ws.Name | Should -Be "sheet1" $ws.Name | Should -Be "sheet1"
$ws.Dimension.Columns | Should -Be ($propertyNames.Count - 10) $ws.Dimension.Columns | Should -Be ($propertyNames.Count - 10)
$ws.Dimension.Rows | Should -Be ($rowcount + 1) # +1 for the header $ws.Dimension.Rows | Should -Be ($rowcount + 1) # +1 for the header
} }
it "Created a new file with just the members of the Display Property Set " {
$propertyNames = $Processes[0].psStandardmembers.DefaultDisplayPropertySet.ReferencedPropertyNames $propertyNames = $Processes[0].psStandardmembers.DefaultDisplayPropertySet.ReferencedPropertyNames
Remove-item -Path $path -ErrorAction SilentlyContinue Remove-item -Path $path -ErrorAction SilentlyContinue
#Test -DisplayPropertySet #Test -DisplayPropertySet
@@ -121,7 +126,6 @@ Describe ExportExcel {
$Excel = Open-ExcelPackage -Path $path $Excel = Open-ExcelPackage -Path $path
$ws = $Excel.Workbook.Worksheets[1] $ws = $Excel.Workbook.Worksheets[1]
it "Created a new file with just the members of the Display Property Set " {
$ws.Name | Should -Be "sheet1" $ws.Name | Should -Be "sheet1"
$ws.Dimension.Columns | Should -Be $propertyNames.Count $ws.Dimension.Columns | Should -Be $propertyNames.Count
$ws.Dimension.Rows | Should -Be ($rowcount + 1) $ws.Dimension.Rows | Should -Be ($rowcount + 1)
@@ -130,6 +134,7 @@ Describe ExportExcel {
Context "#Example 2 # Exports a list of numbers and applies number format " { Context "#Example 2 # Exports a list of numbers and applies number format " {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue Remove-item -Path $path -ErrorAction SilentlyContinue
#testing -ReturnRange switch and applying number format to Formulas as well as values. #testing -ReturnRange switch and applying number format to Formulas as well as values.
@@ -140,11 +145,16 @@ Describe ExportExcel {
} }
$Excel = Open-ExcelPackage -Path $path $Excel = Open-ExcelPackage -Path $path
}
BeforeEach {
$ws = $Excel.Workbook.Worksheets[1]
}
it "Created 1 worksheet " { it "Created 1 worksheet " {
$Excel.Workbook.Worksheets.count | Should -Be 1 $Excel.Workbook.Worksheets.count | Should -Be 1
} }
$ws = $Excel.Workbook.Worksheets[1]
it "Created the worksheet with the expected name, number of rows and number of columns " { it "Created the worksheet with the expected name, number of rows and number of columns " {
$ws.Name | Should -Be "sheet1" $ws.Name | Should -Be "sheet1"
$ws.Dimension.Columns | Should -Be 1 $ws.Dimension.Columns | Should -Be 1
@@ -190,6 +200,7 @@ Describe ExportExcel {
Context "#Examples 3 & 4 # Setting cells for different data types Also added test for URI type" { Context "#Examples 3 & 4 # Setting cells for different data types Also added test for URI type" {
BeforeAll {
if ((Get-Culture).NumberFormat.CurrencySymbol -eq "£") { $OtherCurrencySymbol = "$" } if ((Get-Culture).NumberFormat.CurrencySymbol -eq "£") { $OtherCurrencySymbol = "$" }
else { $OtherCurrencySymbol = "£" } else { $OtherCurrencySymbol = "£" }
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
@@ -225,15 +236,21 @@ Describe ExportExcel {
Process = (Get-Process -Id $PID) Process = (Get-Process -Id $PID)
TimeSpan = [datetime]::Now.Subtract([datetime]::Today) TimeSpan = [datetime]::Now.Subtract([datetime]::Today)
} | Export-Excel -NoNumberConversion IPAddress, StrLeadZero, StrAltPhone2 -Path $path -Calculate -WarningVariable $warnVar } | Export-Excel -NoNumberConversion IPAddress, StrLeadZero, StrAltPhone2 -Path $path -Calculate -WarningVariable $warnVar
}
BeforeEach {
$Excel = Open-ExcelPackage -Path $path
$ws = $Excel.Workbook.Worksheets[1]
}
it "Created a new file " { it "Created a new file " {
Test-Path -Path $path -ErrorAction SilentlyContinue | Should -Be $true Test-Path -Path $path -ErrorAction SilentlyContinue | Should -Be $true
} }
$Excel = Open-ExcelPackage -Path $path
it "Created 1 worksheet with no warnings " { it "Created 1 worksheet with no warnings " {
$Excel.Workbook.Worksheets.count | Should -Be 1 $Excel.Workbook.Worksheets.count | Should -Be 1
$warnVar | Should -BeNullorEmpty $warnVar | Should -BeNullorEmpty
} }
$ws = $Excel.Workbook.Worksheets[1]
it "Created the worksheet with the expected name, number of rows and number of columns " { it "Created the worksheet with the expected name, number of rows and number of columns " {
$ws.Name | Should -Be "sheet1" $ws.Name | Should -Be "sheet1"
$ws.Dimension.Columns | Should -Be 27 $ws.Dimension.Columns | Should -Be 27
@@ -309,6 +326,7 @@ Describe ExportExcel {
Context "# # Setting cells for different data types with -noHeader" { Context "# # Setting cells for different data types with -noHeader" {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue Remove-item -Path $path -ErrorAction SilentlyContinue
#Test -NoHeader & -NoNumberConversion #Test -NoHeader & -NoNumberConversion
@@ -328,16 +346,21 @@ Describe ExportExcel {
PhoneNr3 = '+3244444444' PhoneNr3 = '+3244444444'
Link = [uri]"https://github.com/dfinke/ImportExcel" Link = [uri]"https://github.com/dfinke/ImportExcel"
} | Export-Excel -NoNumberConversion IPAddress, Number1 -Path $path -NoHeader } | Export-Excel -NoNumberConversion IPAddress, Number1 -Path $path -NoHeader
}
BeforeEach {
$Excel = Open-ExcelPackage -Path $path
$ws = $Excel.Workbook.Worksheets[1]
}
it "Created a new file " { it "Created a new file " {
Test-Path -Path $path -ErrorAction SilentlyContinue | Should -Be $true Test-Path -Path $path -ErrorAction SilentlyContinue | Should -Be $true
} }
$Excel = Open-ExcelPackage -Path $path
it "Created 1 worksheet " { it "Created 1 worksheet " {
$Excel.Workbook.Worksheets.count | Should -Be 1 $Excel.Workbook.Worksheets.count | Should -Be 1
} }
$ws = $Excel.Workbook.Worksheets[1]
it "Created the worksheet with the expected name, number of rows and number of columns " { it "Created the worksheet with the expected name, number of rows and number of columns " {
$ws.Name | Should -Be "sheet1" $ws.Name | Should -Be "sheet1"
$ws.Dimension.Columns | Should -Be 14 $ws.Dimension.Columns | Should -Be 14
@@ -367,6 +390,7 @@ Describe ExportExcel {
} }
Context "#Example 5 # Adding a single conditional format "{ Context "#Example 5 # Adding a single conditional format "{
BeforeEach {
#Test New-ConditionalText builds correctly #Test New-ConditionalText builds correctly
$ct = New-ConditionalText -ConditionalType GreaterThan 525 -ConditionalTextColor ([System.Drawing.Color]::DarkRed) -BackgroundColor ([System.Drawing.Color]::LightPink) $ct = New-ConditionalText -ConditionalType GreaterThan 525 -ConditionalTextColor ([System.Drawing.Color]::DarkRed) -BackgroundColor ([System.Drawing.Color]::LightPink)
@@ -375,20 +399,18 @@ Describe ExportExcel {
#Test -ConditionalText with a single conditional spec. #Test -ConditionalText with a single conditional spec.
489, 668, 299, 777, 860, 151, 119, 497, 234, 788 | Export-Excel -Path $path -ConditionalText $ct 489, 668, 299, 777, 860, 151, 119, 497, 234, 788 | Export-Excel -Path $path -ConditionalText $ct
it "Created a new file " {
Test-Path -Path $path -ErrorAction SilentlyContinue | Should -Be $true
}
#ToDo need to test applying conitional formatting to a pre-existing worksheet and removing = from formula #ToDo need to test applying conitional formatting to a pre-existing worksheet and removing = from formula
$Excel = Open-ExcelPackage -Path $path $Excel = Open-ExcelPackage -Path $path
$ws = $Excel.Workbook.Worksheets[1] $ws = $Excel.Workbook.Worksheets[1]
$cf = $ws.ConditionalFormatting[0]
}
it "Added one block of conditional formating for the data range " { it "Added one block of conditional formating for the data range " {
$ws.ConditionalFormatting.Count | Should -Be 1 $ws.ConditionalFormatting.Count | Should -Be 1
$ws.ConditionalFormatting[0].Address | Should -Be ($ws.Dimension.Address) $ws.ConditionalFormatting[0].Address | Should -Be ($ws.Dimension.Address)
} }
$cf = $ws.ConditionalFormatting[0]
it "Set the conditional formatting properties correctly " { it "Set the conditional formatting properties correctly " {
$cf.Formula | Should -Be $ct.Text $cf.Formula | Should -Be $ct.Text
$cf.Type.ToString() | Should -Be $ct.ConditionalType $cf.Type.ToString() | Should -Be $ct.ConditionalType
@@ -397,6 +419,8 @@ Describe ExportExcel {
} }
} }
Context "#Example 6 # Adding multiple conditional formats using short form syntax. " {
BeforeAll {
#Test adding mutliple conditional blocks and using the minimal syntax for New-ConditionalText #Test adding mutliple conditional blocks and using the minimal syntax for New-ConditionalText
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue Remove-item -Path $path -ErrorAction SilentlyContinue
@@ -408,8 +432,12 @@ Describe ExportExcel {
New-ConditionalText Running ([System.Drawing.Color]::Blue) ([System.Drawing.Color]::Cyan) New-ConditionalText Running ([System.Drawing.Color]::Blue) ([System.Drawing.Color]::Cyan)
) )
$ws = $Excel.Workbook.Worksheets[1] $ws = $Excel.Workbook.Worksheets[1]
}
AfterAll {
Close-ExcelPackage -ExcelPackage $Excel
}
Context "#Example 6 # Adding multiple conditional formats using short form syntax. " {
it "Added two blocks of conditional formating for the data range " { it "Added two blocks of conditional formating for the data range " {
$ws.ConditionalFormatting.Count | Should -Be 2 $ws.ConditionalFormatting.Count | Should -Be 2
$ws.ConditionalFormatting[0].Address | Should -Be ($ws.Dimension.Address) $ws.ConditionalFormatting[0].Address | Should -Be ($ws.Dimension.Address)
@@ -422,10 +450,10 @@ Describe ExportExcel {
$ws.ConditionalFormatting[1].Type | Should -Be "ContainsText" $ws.ConditionalFormatting[1].Type | Should -Be "ContainsText"
#Add RGB Comparison #Add RGB Comparison
} }
} } -skip
Close-ExcelPackage -ExcelPackage $Excel
Context "#Example 7 # Update-FirstObjectProperties works " { Context "#Example 7 # Update-FirstObjectProperties works " {
BeforeAll {
$Array = @() $Array = @()
$Obj1 = [PSCustomObject]@{ $Obj1 = [PSCustomObject]@{
@@ -449,6 +477,8 @@ Describe ExportExcel {
$Array = $Obj1, $Obj2, $Obj3 $Array = $Obj1, $Obj2, $Obj3
#test Update-FirstObjectProperties #test Update-FirstObjectProperties
$newarray = $Array | Update-FirstObjectProperties $newarray = $Array | Update-FirstObjectProperties
}
it "Outputs as many objects as it input " { it "Outputs as many objects as it input " {
$newarray.Count | Should -Be $Array.Count $newarray.Count | Should -Be $Array.Count
} }
@@ -462,6 +492,7 @@ Describe ExportExcel {
} }
Context "#Examples 8 & 9 # Adding Pivot tables and charts from parameters" { Context "#Examples 8 & 9 # Adding Pivot tables and charts from parameters" {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
#Test -passthru and -worksheetName creating a new, named, sheet in an existing file. #Test -passthru and -worksheetName creating a new, named, sheet in an existing file.
$Excel = Get-Process | Select-Object -first 20 -Property Name, cpu, pm, handles, company | Export-Excel $path -WorkSheetname Processes -PassThru $Excel = Get-Process | Select-Object -first 20 -Property Name, cpu, pm, handles, company | Export-Excel $path -WorkSheetname Processes -PassThru
@@ -471,19 +502,26 @@ Describe ExportExcel {
$Excel = Open-ExcelPackage $path $Excel = Open-ExcelPackage $path
$PTws = $Excel.Workbook.Worksheets["ProcessesPivotTable"] $PTws = $Excel.Workbook.Worksheets["ProcessesPivotTable"]
$wCount = $Excel.Workbook.Worksheets.Count $wCount = $Excel.Workbook.Worksheets.Count
$pt = $PTws.PivotTables[0]
#test adding pivot chart using the already open sheet
$warnvar = $null
Export-Excel -ExcelPackage $Excel -WorkSheetname Processes -IncludePivotTable -PivotRows Company -PivotData PM -IncludePivotChart -ChartType PieExploded3D -ShowCategory -ShowPercent -NoLegend -WarningAction SilentlyContinue -WarningVariable warnvar
$Excel = Open-ExcelPackage $path
}
it "Added the named sheet and pivot table to the workbook " { it "Added the named sheet and pivot table to the workbook " {
$excel.ProcessesPivotTable | Should -Not -BeNullOrEmpty $excel.ProcessesPivotTable | Should -Not -BeNullOrEmpty
$PTws | Should -Not -BeNullOrEmpty $excel.ProcessesPivotTable.PivotTables.Count | Should -Be 1
$PTws.PivotTables.Count | Should -Be 1
$Excel.Workbook.Worksheets["Processes"] | Should -Not -BeNullOrEmpty $Excel.Workbook.Worksheets["Processes"] | Should -Not -BeNullOrEmpty
$Excel.Workbook.Worksheets.Count | Should -BeGreaterThan 2 $Excel.Workbook.Worksheets.Count | Should -BeGreaterOrEqual 2
$excel.Workbook.Worksheets["Processes"].Dimension.rows | Should -Be 21 #20 data + 1 header $excel.Workbook.Worksheets["Processes"].Dimension.rows | Should -Be 21 #20 data + 1 header
} }
it "Selected the Pivottable page " { it "Selected the Pivottable page " {
Set-ItResult -Pending -Because "Bug in EPPLus 4.5" Set-ItResult -Pending -Because "Bug in EPPLus 4.5"
$PTws.View.TabSelected | Should -Be $true $PTws.View.TabSelected | Should -Be $true
} }
$pt = $PTws.PivotTables[0]
it "Built the expected Pivot table " { it "Built the expected Pivot table " {
$pt.RowFields.Count | Should -Be 1 $pt.RowFields.Count | Should -Be 1
$pt.RowFields[0].Name | Should -Be "Company" $pt.RowFields[0].Name | Should -Be "Company"
@@ -492,10 +530,6 @@ Describe ExportExcel {
$pt.DataFields[0].Field.Name | Should -Be "PM" $pt.DataFields[0].Field.Name | Should -Be "PM"
$PTws.Drawings.Count | Should -Be 0 $PTws.Drawings.Count | Should -Be 0
} }
#test adding pivot chart using the already open sheet
$warnvar = $null
Export-Excel -ExcelPackage $Excel -WorkSheetname Processes -IncludePivotTable -PivotRows Company -PivotData PM -IncludePivotChart -ChartType PieExploded3D -ShowCategory -ShowPercent -NoLegend -WarningAction SilentlyContinue -WarningVariable warnvar
$Excel = Open-ExcelPackage $path
it "Added a chart to the pivot table without rebuilding " { it "Added a chart to the pivot table without rebuilding " {
$ws = $Excel.Workbook.Worksheets["ProcessesPivotTable"] $ws = $Excel.Workbook.Worksheets["ProcessesPivotTable"]
$Excel.Workbook.Worksheets.Count | Should -Be $wCount $Excel.Workbook.Worksheets.Count | Should -Be $wCount
@@ -505,29 +539,35 @@ Describe ExportExcel {
it "Generated a message on re-processing the Pivot table " { it "Generated a message on re-processing the Pivot table " {
$warnVar | Should -Not -BeNullOrEmpty $warnVar | Should -Not -BeNullOrEmpty
} }
it "Appended to the Worksheet and Extended the Pivot table (with a warning) " {
#Test appending data extends pivot chart (with a warning) . #Test appending data extends pivot chart (with a warning) .
$warnVar = $null $warnVar = $null
Get-Process | Select-Object -Last 20 -Property Name, cpu, pm, handles, company | Export-Excel $path -WorkSheetname Processes -Append -IncludePivotTable -PivotRows Company -PivotData PM -IncludePivotChart -ChartType PieExploded3D -WarningAction SilentlyContinue -WarningVariable warnvar Get-Process | Select-Object -Last 20 -Property Name, cpu, pm, handles, company |
Export-Excel $path -WorkSheetname Processes -Append -IncludePivotTable -PivotRows Company -PivotData PM -IncludePivotChart -ChartType PieExploded3D -WarningAction SilentlyContinue -WarningVariable warnvar
$Excel = Open-ExcelPackage $path $Excel = Open-ExcelPackage $path
$pt = $Excel.Workbook.Worksheets["ProcessesPivotTable"].PivotTables[0] $pt = $Excel.Workbook.Worksheets["ProcessesPivotTable"].PivotTables[0]
it "Appended to the Worksheet and Extended the Pivot table " {
$Excel.Workbook.Worksheets.Count | Should -Be $wCount $Excel.Workbook.Worksheets.Count | Should -Be $wCount
$excel.Workbook.Worksheets["Processes"].Dimension.rows | Should -Be 41 #appended 20 rows to the previous total $excel.Workbook.Worksheets["Processes"].Dimension.rows | Should -Be 41 #appended 20 rows to the previous total
$pt.CacheDefinition.CacheDefinitionXml.pivotCacheDefinition.cacheSource.worksheetSource.ref | $pt.CacheDefinition.CacheDefinitionXml.pivotCacheDefinition.cacheSource.worksheetSource.ref |
Should be "A1:E41" Should -Be "A1:E41"
}
it "Generated a message on extending the Pivot table " {
$warnVar | Should -Not -BeNullOrEmpty $warnVar | Should -Not -BeNullOrEmpty
} }
} }
Context " # Add-Worksheet inserted sheets, moved them correctly, and copied a sheet" { Context " # Add-Worksheet inserted sheets, moved them correctly, and copied a sheet" {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
#Test the -CopySource and -Movexxxx parameters for Add-Worksheet #Test the -CopySource and -Movexxxx parameters for Add-Worksheet
$Excel = Get-Process | Select-Object -first 20 -Property Name, cpu, pm, handles, company |
Export-Excel $path -WorkSheetname Processes -IncludePivotTable -PivotRows Company -PivotData PM -NoTotalsInPivot -PivotDataToColumn -Activate
$Excel = Open-ExcelPackage $path $Excel = Open-ExcelPackage $path
#At this point Sheets Should be in the order Sheet1, Processes, ProcessesPivotTable #At this point Sheets Should be in the order Sheet1, Processes, ProcessesPivotTable
$null = Add-Worksheet -ExcelPackage $Excel -WorkSheetname "Processes" -MoveToEnd # order now Sheet1, ProcessesPivotTable, Processes $null = Add-Worksheet -ExcelPackage $Excel -WorkSheetname "Processes" -MoveToEnd # order now ProcessesPivotTable, Processes
$null = Add-Worksheet -ExcelPackage $Excel -WorkSheetname "NewSheet" -MoveAfter "*" -CopySource ($excel.Workbook.Worksheets["Sheet1"]) # Now its NewSheet, Sheet1, ProcessesPivotTable, Processes $null = Add-Worksheet -ExcelPackage $Excel -WorkSheetname "NewSheet" -MoveAfter "*" -CopySource ($excel.Workbook.Worksheets["Processes"]) # Now its NewSheet, ProcessesPivotTable, Processes
$null = Add-Worksheet -ExcelPackage $Excel -WorkSheetname "Sheet1" -MoveAfter "Processes" # Now its NewSheet, ProcessesPivotTable, Processes, Sheet1 $null = Add-Worksheet -ExcelPackage $Excel -WorkSheetname "Sheet1" -MoveAfter "Processes" # Now its NewSheet, ProcessesPivotTable, Processes, Sheet1
$null = Add-Worksheet -ExcelPackage $Excel -WorkSheetname "Another" -MoveToStart # Now its Another, NewSheet, ProcessesPivotTable, Processes, Sheet1 $null = Add-Worksheet -ExcelPackage $Excel -WorkSheetname "Another" -MoveToStart # Now its Another, NewSheet, ProcessesPivotTable, Processes, Sheet1
$null = Add-Worksheet -ExcelPackage $Excel -WorkSheetname "NearDone" -MoveBefore 5 # Now its Another, NewSheet, ProcessesPivotTable, Processes, NearDone ,Sheet1 $null = Add-Worksheet -ExcelPackage $Excel -WorkSheetname "NearDone" -MoveBefore 5 # Now its Another, NewSheet, ProcessesPivotTable, Processes, NearDone ,Sheet1
@@ -535,6 +575,7 @@ Describe ExportExcel {
Close-ExcelPackage $Excel Close-ExcelPackage $Excel
$Excel = Open-ExcelPackage $path $Excel = Open-ExcelPackage $path
}
it "Got the Sheets in the right order " { it "Got the Sheets in the right order " {
$excel.Workbook.Worksheets[1].Name | Should -Be "Another" $excel.Workbook.Worksheets[1].Name | Should -Be "Another"
@@ -546,17 +587,15 @@ Describe ExportExcel {
$excel.Workbook.Worksheets[7].Name | Should -Be "Sheet1" $excel.Workbook.Worksheets[7].Name | Should -Be "Sheet1"
} }
it "Cloned 'Sheet1' to 'NewSheet' " { it "Cloned 'Processes' to 'NewSheet' " {
$newWs = $excel.Workbook.Worksheets["NewSheet"] $newWs = $excel.Workbook.Worksheets["NewSheet"]
$newWs.Dimension.Address | Should -Be ($excel.Workbook.Worksheets["Sheet1"].Dimension.Address) $newWs.Dimension.Address | Should -Be ($excel.Workbook.Worksheets["Processes"].Dimension.Address)
$newWs.ConditionalFormatting.Count | Should -Be ($excel.Workbook.Worksheets["Sheet1"].ConditionalFormatting.Count)
$newWs.ConditionalFormatting[0].Address.Address | Should -Be ($excel.Workbook.Worksheets["Sheet1"].ConditionalFormatting[0].Address.Address)
$newWs.ConditionalFormatting[0].Formula | Should -Be ($excel.Workbook.Worksheets["Sheet1"].ConditionalFormatting[0].Formula)
} }
} }
Context " # Create and append with Start row and Start Column, inc ranges and Pivot table. " { Context " # Create and append with Start row and Start Column, inc ranges and Pivot table. " {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
remove-item -Path $path -ErrorAction SilentlyContinue remove-item -Path $path -ErrorAction SilentlyContinue
#Catch warning #Catch warning
@@ -567,6 +606,8 @@ Describe ExportExcel {
$Excel = Open-ExcelPackage $path $Excel = Open-ExcelPackage $path
$dataWs = $Excel.Workbook.Worksheets["withOffset"] $dataWs = $Excel.Workbook.Worksheets["withOffset"]
$pt = $Excel.Workbook.Worksheets["PTOffset"].PivotTables[0] $pt = $Excel.Workbook.Worksheets["PTOffset"].PivotTables[0]
}
it "Created and appended to a sheet offset from the top left corner " { it "Created and appended to a sheet offset from the top left corner " {
$dataWs.Cells[1, 1].Value | Should -BeNullOrEmpty $dataWs.Cells[1, 1].Value | Should -BeNullOrEmpty
$dataWs.Cells[2, 2].Value | Should -BeNullOrEmpty $dataWs.Cells[2, 2].Value | Should -BeNullOrEmpty
@@ -593,8 +634,7 @@ Describe ExportExcel {
$dataWs.Names["CPU"].Columns | Should -Be 1 $dataWs.Names["CPU"].Columns | Should -Be 1
} }
it "Created and extended the pivot table " { it "Created and extended the pivot table " {
$pt.CacheDefinition.CacheDefinitionXml.pivotCacheDefinition.cacheSource.worksheetSource.ref | $pt.CacheDefinition.CacheDefinitionXml.pivotCacheDefinition.cacheSource.worksheetSource.ref | Should -be "C3:G23"
Should be "C3:G23"
$pt.ColumGrandTotals | Should -Be $false $pt.ColumGrandTotals | Should -Be $false
$pt.RowGrandTotals | Should -Be $false $pt.RowGrandTotals | Should -Be $false
$pt.Fields["Company"].IsRowField | Should -Be $true $pt.Fields["Company"].IsRowField | Should -Be $true
@@ -607,6 +647,7 @@ Describe ExportExcel {
} }
Context " # Create and append explicit and auto table and range extension" { Context " # Create and append explicit and auto table and range extension" {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
#Test -Append automatically extends a table, even when it is not specified in the append command; #Test -Append automatically extends a table, even when it is not specified in the append command;
Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -TableName ProcTab -AutoNameRange -WorkSheetname NoOffset -ClearSheet Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -TableName ProcTab -AutoNameRange -WorkSheetname NoOffset -ClearSheet
@@ -614,6 +655,8 @@ Describe ExportExcel {
Get-Process | Select-Object -last 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -AutoNameRange -WorkSheetname NoOffset -Append -Numberformat 'Number' Get-Process | Select-Object -last 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -AutoNameRange -WorkSheetname NoOffset -Append -Numberformat 'Number'
$Excel = Open-ExcelPackage $path $Excel = Open-ExcelPackage $path
$dataWs = $Excel.Workbook.Worksheets["NoOffset"] $dataWs = $Excel.Workbook.Worksheets["NoOffset"]
}
#table should be 20 rows + header after extending the data. CPU range should be 1x20 #table should be 20 rows + header after extending the data. CPU range should be 1x20
it "Created a new sheet and auto-extended a table and explicitly extended named ranges " { it "Created a new sheet and auto-extended a table and explicitly extended named ranges " {
$dataWs.Tables["ProcTab"].Address.Address | Should -Be "A1:E21" $dataWs.Tables["ProcTab"].Address.Address | Should -Be "A1:E21"
@@ -624,13 +667,14 @@ Describe ExportExcel {
$dataWs.cells["C2"].Style.Numberformat.Format | Should -Be "General" $dataWs.cells["C2"].Style.Numberformat.Format | Should -Be "General"
$dataWs.cells["C12"].Style.Numberformat.Format | Should -Be "0.00" $dataWs.cells["C12"].Style.Numberformat.Format | Should -Be "0.00"
} }
#Test extneding autofilter and range when explicitly specified in the append
it "Created a new sheet and explicitly extended named range and autofilter " {
#Test extending autofilter and range when explicitly specified in the append
$excel = Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company | Export-Excel -ExcelPackage $excel -RangeName procs -AutoFilter -WorkSheetname NoOffset -ClearSheet -PassThru $excel = Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company | Export-Excel -ExcelPackage $excel -RangeName procs -AutoFilter -WorkSheetname NoOffset -ClearSheet -PassThru
Get-Process | Select-Object -last 10 -Property Name, cpu, pm, handles, company | Export-Excel -ExcelPackage $excel -RangeName procs -AutoFilter -WorkSheetname NoOffset -Append Get-Process | Select-Object -last 10 -Property Name, cpu, pm, handles, company | Export-Excel -ExcelPackage $excel -RangeName procs -AutoFilter -WorkSheetname NoOffset -Append
$Excel = Open-ExcelPackage $path $Excel = Open-ExcelPackage $path
$dataWs = $Excel.Workbook.Worksheets["NoOffset"] $dataWs = $Excel.Workbook.Worksheets["NoOffset"]
it "Created a new sheet and explicitly extended named range and autofilter " {
$dataWs.names["procs"].rows | Should -Be 21 $dataWs.names["procs"].rows | Should -Be 21
$dataWs.names["procs"].Columns | Should -Be 5 $dataWs.names["procs"].Columns | Should -Be 5
$dataWs.Names["_xlnm._FilterDatabase"].Rows | Should -Be 21 #2 x 10 data + 1 header $dataWs.Names["_xlnm._FilterDatabase"].Rows | Should -Be 21 #2 x 10 data + 1 header
@@ -639,92 +683,17 @@ Describe ExportExcel {
} }
} }
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.
$ptDef = [ordered]@{} # $ptDef = [ordered]@{}
$ptDef += New-PivotTableDefinition -PivotTableName "PT1" -SourceWorkSheet 'Sheet1' -PivotRows "Status" -PivotData @{'Status' = 'Count'} -PivotTotals Columns -PivotFilter "StartType" -IncludePivotChart -ChartType BarClustered3D -ChartTitle "Services by status" -ChartHeight 512 -ChartWidth 768 -ChartRow 10 -ChartColumn 0 -NoLegend -PivotColumns CanPauseAndContinue # $ptDef += New-PivotTableDefinition -PivotTableName "PT1" -SourceWorkSheet 'Sheet1' -PivotRows "Status" -PivotData @{'Status' = 'Count' } -PivotTotals Columns -PivotFilter "StartType" -IncludePivotChart -ChartType BarClustered3D -ChartTitle "Services by status" -ChartHeight 512 -ChartWidth 768 -ChartRow 10 -ChartColumn 0 -NoLegend -PivotColumns CanPauseAndContinue
$ptDef += New-PivotTableDefinition -PivotTableName "PT2" -SourceWorkSheet 'Sheet2' -PivotRows "Company" -PivotData @{'Company' = 'Count'} -PivotTotalS Rows -IncludePivotChart -ChartType PieExploded3D -ShowPercent -WarningAction SilentlyContinue # $ptDef += New-PivotTableDefinition -PivotTableName "PT2" -SourceWorkSheet 'Sheet2' -PivotRows "Company" -PivotData @{'Company' = 'Count' } -PivotTotalS Rows -IncludePivotChart -ChartType PieExploded3D -ShowPercent -WarningAction SilentlyContinue
it "Built a pivot definition using New-PivotTableDefinition " {
$ptDef.PT1.SourceWorkSheet | Should -Be 'Sheet1'
$ptDef.PT1.PivotRows | Should -Be 'Status'
$ptDef.PT1.PivotData.Status | Should -Be 'Count'
$ptDef.PT1.PivotFilter | Should -Be 'StartType'
$ptDef.PT1.IncludePivotChart | Should -Be $true
$ptDef.PT1.ChartType.tostring() | Should -Be 'BarClustered3D'
$ptDef.PT1.PivotTotals | Should -Be 'Columns'
}
Remove-Item -Path $path
#Catch warning
$warnvar = $null
#Test create two data pages; as part of adding the second give both their own pivot table, test -autosize switch
Get-Service | Select-Object -Property Status, Name, DisplayName, StartType, CanPauseAndContinue | Export-Excel -Path $path -AutoSize -TableName "All Services" -TableStyle Medium1 -WarningVariable warnvar -WarningAction SilentlyContinue
Get-Process | Select-Object -Property Name, Company, Handles, CPU, VM | Export-Excel -Path $path -AutoSize -WorkSheetname 'sheet2' -TableName "Processes" -TableStyle Light1 -Title "Processes" -TitleFillPattern Solid -TitleBackgroundColor ([System.Drawing.Color]::AliceBlue) -TitleBold -TitleSize 22 -PivotTableDefinition $ptDef
$Excel = Open-ExcelPackage $path
$ws1 = $Excel.Workbook.Worksheets["Sheet1"]
$ws2 = $Excel.Workbook.Worksheets["Sheet2"]
if ($isWindows) {
it "Set Column widths (with autosize) " {
$ws1.Column(2).Width | Should -Not -Be $ws1.DefaultColWidth
$ws2.Column(1).width | Should -Not -Be $ws2.DefaultColWidth
}
}
it "Added tables to both sheets (handling illegal chars) and a title in sheet 2 " {
$warnvar.count | Should -BeGreaterThan 0
$ws1.tables.Count | Should -Be 1
$ws2.tables.Count | Should -Be 1
$ws1.Tables[0].Address.Start.Row | Should -Be 1
$ws2.Tables[0].Address.Start.Row | Should -Be 2 #Title in row 1
$ws1.Tables[0].Address.End.Address | Should -Be $ws1.Dimension.End.Address
$ws2.Tables[0].Address.End.Address | Should -Be $ws2.Dimension.End.Address
$ws2.Tables[0].Name | Should -Be "Processes"
$ws2.Tables[0].StyleName | Should -Be "TableStyleLight1"
$ws2.Cells["A1"].Value | Should -Be "Processes"
$ws2.Cells["A1"].Style.Font.Bold | Should -Be $true
$ws2.Cells["A1"].Style.Font.Size | Should -Be 22
$ws2.Cells["A1"].Style.Fill.PatternType.tostring() | Should -Be "solid"
$ws2.Cells["A1"].Style.Fill.BackgroundColor.Rgb | Should -Be "fff0f8ff"
}
$ptsheet1 = $Excel.Workbook.Worksheets["Pt1"]
$ptsheet2 = $Excel.Workbook.Worksheets["Pt2"]
$PT1 = $ptsheet1.PivotTables[0]
$PT2 = $ptsheet2.PivotTables[0]
$PC1 = $ptsheet1.Drawings[0]
$PC2 = $ptsheet2.Drawings[0]
it "Created the pivot tables linked to the right data. " {
$PT1.CacheDefinition.CacheDefinitionXml.pivotCacheDefinition.cacheSource.worksheetSource.name|
Should be "All_services"
$PT2.CacheDefinition.CacheDefinitionXml.pivotCacheDefinition.cacheSource.worksheetSource.name |
Should be "Processes"
}
it "Set the other pivot tables and chart options from the definitions. " {
$pt1.PageFields[0].Name | Should -Be 'StartType'
$pt1.RowFields[0].Name | Should -Be 'Status'
$pt1.DataFields[0].Field.name | Should -Be 'Status'
$pt1.DataFields[0].Function | Should -Be 'Count'
$pt1.ColumGrandTotals | Should -Be $true
$pt1.RowGrandTotals | Should -Be $false
$pt2.ColumGrandTotals | Should -Be $false
$pt2.RowGrandTotals | Should -Be $true
$pc1.ChartType | Should -Be 'BarClustered3D'
$pc1.From.Column | Should -Be 0 #chart 1 at 0,10 chart 2 at 4,0 (default)
$pc2.From.Column | Should -Be 4
$pc1.From.Row | Should -Be 10
$pc2.From.Row | Should -Be 0
$pc1.Legend.Font | Should -BeNullOrEmpty #Best check for legend removed.
$pc2.Legend.Font | Should -Not -BeNullOrEmpty
$pc1.Title.Text | Should -Be 'Services by status'
$pc2.DataLabel.ShowPercent | Should -Be $true
}
}
Context "#Example 13 # Formatting and another way to do a pivot. " { Context "#Example 13 # Formatting and another way to do a pivot. " {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
Remove-Item $path Remove-Item $path -ErrorAction SilentlyContinue
#Test freezing top row/first column, adding formats and a pivot table - from Add-Pivot table not a specification variable - after the export #Test freezing top row/first column, adding formats and a pivot table - from Add-Pivot table not a specification variable - after the export
$excel = Get-Process | Select-Object -Property Name, Company, Handles, CPU, PM, NPM, WS | Export-Excel -Path $path -ClearSheet -WorkSheetname "Processes" -FreezeTopRowFirstColumn -PassThru $excel = Get-Process | Select-Object -Property Name, Company, Handles, CPU, PM, NPM, WS | Export-Excel -Path $path -ClearSheet -WorkSheetname "Processes" -FreezeTopRowFirstColumn -PassThru
$sheet = $excel.Workbook.Worksheets["Processes"] $sheet = $excel.Workbook.Worksheets["Processes"]
@@ -746,6 +715,7 @@ Describe ExportExcel {
$excel = Open-ExcelPackage $path $excel = Open-ExcelPackage $path
$sheet = $excel.Workbook.Worksheets["Processes"] $sheet = $excel.Workbook.Worksheets["Processes"]
}
it "Returned the rule when calling Add-ConditionalFormatting -passthru " { it "Returned the rule when calling Add-ConditionalFormatting -passthru " {
$rule | Should -Not -BeNullOrEmpty $rule | Should -Not -BeNullOrEmpty
$rule.getType().fullname | Should -Be "OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingTopPercent" $rule.getType().fullname | Should -Be "OfficeOpenXml.ConditionalFormatting.ExcelConditionalFormattingTopPercent"
@@ -793,26 +763,28 @@ Describe ExportExcel {
it "Froze the panes " { it "Froze the panes " {
$sheet.view.Panes.Count | Should -Be 3 $sheet.view.Panes.Count | Should -Be 3
} }
$ptsheet1 = $Excel.Workbook.Worksheets["Pt_procs"]
it "Created the pivot table " { it "Created the pivot table " {
$ptsheet1 = $Excel.Workbook.Worksheets["Pt_procs"]
$ptsheet1 | Should -Not -BeNullOrEmpty $ptsheet1 | Should -Not -BeNullOrEmpty
$ptsheet1.PivotTables[0].DataFields[0].Field.Name | Should -Be "Name" $ptsheet1.PivotTables[0].DataFields[0].Field.Name | Should -Be "Name"
$ptsheet1.PivotTables[0].DataFields[0].Function | Should -Be "Count" $ptsheet1.PivotTables[0].DataFields[0].Function | Should -Be "Count"
$ptsheet1.PivotTables[0].RowFields[0].Name | Should -Be "Company" $ptsheet1.PivotTables[0].RowFields[0].Name | Should -Be "Company"
$ptsheet1.PivotTables[0].CacheDefinition.CacheDefinitionXml.pivotCacheDefinition.cacheSource.worksheetSource.ref | $ptsheet1.PivotTables[0].CacheDefinition.CacheDefinitionXml.pivotCacheDefinition.cacheSource.worksheetSource.ref |
Should be $sheet.Dimension.address Should -be $sheet.Dimension.address
} }
} }
Context " # Chart from MultiSeries.ps1 in the Examples\charts Directory" { Context " # Chart from MultiSeries.ps1 in the Examples\charts Directory" {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue Remove-Item -Path $path -ErrorAction SilentlyContinue
#Test we haven't missed any parameters on New-ChartDefinition which are on add chart or vice versa. }
it "Found the same parameters for Add-ExcelChart and New-ExcelChartDefinintion " {
#Test we haven't missed any parameters on New-ChartDefinition which are on add chart or vice versa.
$ParamChk1 = (Get-command Add-ExcelChart ).Parameters.Keys.where( { -not (Get-command New-ExcelChartDefinition).Parameters.ContainsKey($_) }) | Sort-Object $ParamChk1 = (Get-command Add-ExcelChart ).Parameters.Keys.where( { -not (Get-command New-ExcelChartDefinition).Parameters.ContainsKey($_) }) | Sort-Object
$ParamChk2 = (Get-command New-ExcelChartDefinition).Parameters.Keys.where( { -not (Get-command Add-ExcelChart ).Parameters.ContainsKey($_) }) $ParamChk2 = (Get-command New-ExcelChartDefinition).Parameters.Keys.where( { -not (Get-command Add-ExcelChart ).Parameters.ContainsKey($_) })
it "Found the same parameters for Add-ExcelChart and New-ExcelChartDefinintion " {
$ParamChk1.count | Should -Be 3 $ParamChk1.count | Should -Be 3
$ParamChk1[0] | Should -Be "PassThru" $ParamChk1[0] | Should -Be "PassThru"
$ParamChk1[1] | Should -Be "PivotTable" $ParamChk1[1] | Should -Be "PivotTable"
@@ -820,9 +792,9 @@ Describe ExportExcel {
$ParamChk2.count | Should -Be 1 $ParamChk2.count | Should -Be 1
$ParamChk2[0] | Should -Be "Header" $ParamChk2[0] | Should -Be "Header"
} }
it "Used Invoke-Sum to create a data set " {
#Test Invoke-Sum #Test Invoke-Sum
$data = Invoke-Sum (Get-Process) Company Handles, PM, VirtualMemorySize $data = Invoke-Sum (Get-Process) Company Handles, PM, VirtualMemorySize
it "Used Invoke-Sum to create a data set " {
$data | Should -Not -BeNullOrEmpty $data | Should -Not -BeNullOrEmpty
$data.count | Should -BeGreaterThan 1 $data.count | Should -BeGreaterThan 1
$data[1].Name | Should -Not -BeNullOrEmpty $data[1].Name | Should -Not -BeNullOrEmpty
@@ -830,9 +802,9 @@ Describe ExportExcel {
$data[1].PM | Should -Not -BeNullOrEmpty $data[1].PM | Should -Not -BeNullOrEmpty
$data[1].VirtualMemorySize | Should -Not -BeNullOrEmpty $data[1].VirtualMemorySize | Should -Not -BeNullOrEmpty
} }
$c = New-ExcelChartDefinition -Title Stats -ChartType LineMarkersStacked -XRange "Processes[Name]" -YRange "Processes[PM]", "Processes[VirtualMemorySize]" -SeriesHeader 'PM', 'VMSize'
it "Created the Excel chart definition " { it "Created an Excel chart definition and used it " {
$c = New-ExcelChartDefinition -Title Stats -ChartType LineMarkersStacked -XRange "Processes[Name]" -YRange "Processes[PM]", "Processes[VirtualMemorySize]" -SeriesHeader 'PM', 'VMSize'
$c | Should -Not -BeNullOrEmpty $c | Should -Not -BeNullOrEmpty
$c.ChartType.gettype().name | Should -Be "eChartType" $c.ChartType.gettype().name | Should -Be "eChartType"
$c.ChartType.tostring() | Should -Be "LineMarkersStacked" $c.ChartType.tostring() | Should -Be "LineMarkersStacked"
@@ -845,12 +817,11 @@ Describe ExportExcel {
$c.Nolegend | Should -Not -Be $true $c.Nolegend | Should -Not -Be $true
$c.ShowCategory | Should -Not -Be $true $c.ShowCategory | Should -Not -Be $true
$c.ShowPercent | Should -Not -Be $true $c.ShowPercent | Should -Not -Be $true
}
#Test creating a chart using -ExcelChartDefinition.
$data | Export-Excel $path -AutoSize -TableName Processes -ExcelChartDefinition $c $data | Export-Excel $path -AutoSize -TableName Processes -ExcelChartDefinition $c
$excel = Open-ExcelPackage -Path $path $excel = Open-ExcelPackage -Path $path
$drawings = $excel.Workbook.Worksheets[1].drawings $drawings = $excel.Workbook.Worksheets[1].drawings
it "Used the Excel chart definition with Export-Excel " {
$drawings.count | Should -Be 1 $drawings.count | Should -Be 1
$drawings[0].ChartType | Should -Be "LineMarkersStacked" $drawings[0].ChartType | Should -Be "LineMarkersStacked"
$drawings[0].Series.count | Should -Be 2 $drawings[0].Series.count | Should -Be 2
@@ -859,11 +830,13 @@ Describe ExportExcel {
$drawings[0].Series[1].Series | Should -Be "'Sheet1'!Processes[VirtualMemorySize]" $drawings[0].Series[1].Series | Should -Be "'Sheet1'!Processes[VirtualMemorySize]"
$drawings[0].Series[1].XSeries | Should -Be "'Sheet1'!Processes[Name]" $drawings[0].Series[1].XSeries | Should -Be "'Sheet1'!Processes[Name]"
$drawings[0].Title.text | Should -Be "Stats" $drawings[0].Title.text | Should -Be "Stats"
}
Close-ExcelPackage $excel Close-ExcelPackage $excel
} }
}
Context " # variation of plot.ps1 from Examples Directory using Add chart outside ExportExcel" { Context " # variation of plot.ps1 from Examples Directory using Add chart outside ExportExcel" {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
#Test inserting a fomual #Test inserting a fomual
$excel = 0..360 | ForEach-Object { [pscustomobject][ordered]@{x = $_; Sinx = "=Sin(Radians(x)) " } } | Export-Excel -AutoNameRange -Path $path -WorkSheetname SinX -ClearSheet -FreezeFirstColumn -PassThru $excel = 0..360 | ForEach-Object { [pscustomobject][ordered]@{x = $_; Sinx = "=Sin(Radians(x)) " } } | Export-Excel -AutoNameRange -Path $path -WorkSheetname SinX -ClearSheet -FreezeFirstColumn -PassThru
@@ -875,6 +848,8 @@ Describe ExportExcel {
Add-ConditionalFormatting -Worksheet $excel.Workbook.Worksheets["Sinx"] -Range "B2:B362" -RuleType LessThan -ConditionValue "=B1" -ForeGroundColor ([System.Drawing.Color]::Red) Add-ConditionalFormatting -Worksheet $excel.Workbook.Worksheets["Sinx"] -Range "B2:B362" -RuleType LessThan -ConditionValue "=B1" -ForeGroundColor ([System.Drawing.Color]::Red)
$ws = $Excel.Workbook.Worksheets["Sinx"] $ws = $Excel.Workbook.Worksheets["Sinx"]
$d = $ws.Drawings[0] $d = $ws.Drawings[0]
}
It "Controled the axes and title and legend of the chart " { It "Controled the axes and title and legend of the chart " {
$d.XAxis.MaxValue | Should -Be 361 $d.XAxis.MaxValue | Should -Be 361
$d.XAxis.MajorUnit | Should -Be 30 $d.XAxis.MajorUnit | Should -Be 30
@@ -902,10 +877,14 @@ Describe ExportExcel {
It "Appplied conditional formatting to the data " { It "Appplied conditional formatting to the data " {
$ws.ConditionalFormatting[0].Formula | Should -Be "B1" $ws.ConditionalFormatting[0].Formula | Should -Be "B1"
} }
AfterAll {
Close-ExcelPackage -ExcelPackage $excel -nosave Close-ExcelPackage -ExcelPackage $excel -nosave
} }
}
Context " # Quick line chart" { Context " # Quick line chart" {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue Remove-Item -Path $path -ErrorAction SilentlyContinue
#test drawing a chart when data doesn't have a string #test drawing a chart when data doesn't have a string
@@ -913,6 +892,7 @@ Describe ExportExcel {
$excel = Open-ExcelPackage -Path $path $excel = Open-ExcelPackage -Path $path
$ws = $excel.Sheet1 $ws = $excel.Sheet1
$d = $ws.Drawings[0] $d = $ws.Drawings[0]
}
it "Created the chart " { it "Created the chart " {
$d.Title.text | Should -BeNullOrEmpty $d.Title.text | Should -BeNullOrEmpty
$d.ChartType | Should -Be "line" $d.ChartType | Should -Be "line"
@@ -924,6 +904,7 @@ Describe ExportExcel {
} }
Context " # Quick Pie chart and three icon conditional formating" { Context " # Quick Pie chart and three icon conditional formating" {
BeforeAll {
$path = "TestDrive:\Pie.xlsx" $path = "TestDrive:\Pie.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue Remove-Item -Path $path -ErrorAction SilentlyContinue
$range = Get-Process | Group-Object -Property company | Where-Object -Property name | $range = Get-Process | Group-Object -Property company | Where-Object -Property name |
@@ -931,6 +912,8 @@ Describe ExportExcel {
Export-Excel -NoHeader -AutoNameRange -path $path -ReturnRange -PieChart -ShowPercent Export-Excel -NoHeader -AutoNameRange -path $path -ReturnRange -PieChart -ShowPercent
$Cf = New-ConditionalFormattingIconSet -Range ($range -replace "^.*:", "B2:") -ConditionalFormat ThreeIconSet -Reverse -IconType Flags $Cf = New-ConditionalFormattingIconSet -Range ($range -replace "^.*:", "B2:") -ConditionalFormat ThreeIconSet -Reverse -IconType Flags
$ct = New-ConditionalText -Text "Microsoft" -ConditionalTextColor ([System.Drawing.Color]::Red) -BackgroundColor([System.Drawing.Color]::AliceBlue) -ConditionalType ContainsText $ct = New-ConditionalText -Text "Microsoft" -ConditionalTextColor ([System.Drawing.Color]::Red) -BackgroundColor([System.Drawing.Color]::AliceBlue) -ConditionalType ContainsText
}
it "Created the Conditional formatting rules " { it "Created the Conditional formatting rules " {
$cf.Formatter | Should -Be "ThreeIconSet" $cf.Formatter | Should -Be "ThreeIconSet"
$cf.IconType | Should -Be "Flags" $cf.IconType | Should -Be "Flags"
@@ -941,12 +924,16 @@ Describe ExportExcel {
$ct.ConditionalType | Should -Be "ContainsText" $ct.ConditionalType | Should -Be "ContainsText"
$ct.Text | Should -Be "Microsoft" $ct.Text | Should -Be "Microsoft"
} }
BeforeEach {
#Test -ConditionalFormat & -ConditionalText #Test -ConditionalFormat & -ConditionalText
Export-Excel -Path $path -ConditionalFormat $cf -ConditionalText $ct Export-Excel -Path $path -ConditionalFormat $cf -ConditionalText $ct
$excel = Open-ExcelPackage -Path $path $excel = Open-ExcelPackage -Path $path
$rows = $range -replace "^.*?(\d+)$", '$1' $rows = $range -replace "^.*?(\d+)$", '$1'
$chart = $excel.Workbook.Worksheets["sheet1"].Drawings[0] $chart = $excel.Workbook.Worksheets["sheet1"].Drawings[0]
$cFmt = $excel.Workbook.Worksheets["sheet1"].ConditionalFormatting $cFmt = $excel.Workbook.Worksheets["sheet1"].ConditionalFormatting
}
it "Created the chart with the right series " { it "Created the chart with the right series " {
$chart.ChartType | Should -Be "PieExploded3D" $chart.ChartType | Should -Be "PieExploded3D"
$chart.series.series | Should -Be "'Sheet1'!B1:B$rows" #would be B2 and A2 if we had a header. $chart.series.series | Should -Be "'Sheet1'!B1:B$rows" #would be B2 and A2 if we had a header.
@@ -961,6 +948,7 @@ Describe ExportExcel {
} }
Context " # Awkward multiple tables" { Context " # Awkward multiple tables" {
BeforeEach {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
#Test creating 3 on overlapping tables on the same page. Create rightmost the left most then middle. #Test creating 3 on overlapping tables on the same page. Create rightmost the left most then middle.
remove-item -Path $path -ErrorAction SilentlyContinue remove-item -Path $path -ErrorAction SilentlyContinue
@@ -985,6 +973,8 @@ Describe ExportExcel {
$excel = Open-ExcelPackage -Path $path $excel = Open-ExcelPackage -Path $path
$ws = $excel.Workbook.Worksheets[1] $ws = $excel.Workbook.Worksheets[1]
}
it "Created 3 tables " { it "Created 3 tables " {
$ws.tables.count | Should -Be 3 $ws.tables.count | Should -Be 3
} }
@@ -1002,9 +992,11 @@ Describe ExportExcel {
} }
Context " # Parameters and ParameterSets" { Context " # Parameters and ParameterSets" {
BeforeAll {
$Path = Join-Path (Resolve-Path 'TestDrive:').ProviderPath "test.xlsx" $Path = Join-Path (Resolve-Path 'TestDrive:').ProviderPath "test.xlsx"
Remove-Item -Path $Path -ErrorAction SilentlyContinue Remove-Item -Path $Path -ErrorAction SilentlyContinue
$Processes = Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company $Processes = Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company
}
it "Allows the default parameter set with Path".PadRight(87) { it "Allows the default parameter set with Path".PadRight(87) {
$ExcelPackage = $Processes | Export-Excel -Path $Path -PassThru $ExcelPackage = $Processes | Export-Excel -Path $Path -PassThru
@@ -1017,8 +1009,8 @@ Describe ExportExcel {
} }
it "throws when the ExcelPackage is specified with either -path or -Now".PadRight(87) { it "throws when the ExcelPackage is specified with either -path or -Now".PadRight(87) {
$ExcelPackage = Export-Excel -Path $Path -PassThru $ExcelPackage = Export-Excel -Path $Path -PassThru
{Export-Excel -ExcelPackage $ExcelPackage -Path $Path} | Should -Throw 'Parameter set cannot be resolved using the specified named parameters' { Export-Excel -ExcelPackage $ExcelPackage -Path $Path } | Should -Throw
{Export-Excel -ExcelPackage $ExcelPackage -Now} | Should -Throw 'Parameter set cannot be resolved using the specified named parameters' { Export-Excel -ExcelPackage $ExcelPackage -Now } | Should -Throw
$Processes | Export-Excel -ExcelPackage $ExcelPackage $Processes | Export-Excel -ExcelPackage $ExcelPackage
Remove-Item -Path $Path Remove-Item -Path $Path

View File

@@ -1,6 +1,7 @@
Describe "Creating workbook with a single line" { Describe "Creating workbook with a single line" {
BeforeAll {
$path = "TestDrive:\test.xlsx" $path = "TestDrive:\test.xlsx"
remove-item -path $path -ErrorAction SilentlyContinue remove-item -path $path -ErrorAction SilentlyContinue
ConvertFrom-Csv @" ConvertFrom-Csv @"
@@ -15,11 +16,14 @@ Apple, New York, 1200,700
"@ | Export-Excel -Path $path -TableStyle Medium13 -tablename "RawData" -ConditionalFormat @{Range = "C2:C7"; DataBarColor = "Green" } -ExcelChartDefinition @{ChartType = "Doughnut"; XRange = "A2:B7"; YRange = "C2:C7"; width = 800; } -PivotTableDefinition @{Sales = @{ "@ | Export-Excel -Path $path -TableStyle Medium13 -tablename "RawData" -ConditionalFormat @{Range = "C2:C7"; DataBarColor = "Green" } -ExcelChartDefinition @{ChartType = "Doughnut"; XRange = "A2:B7"; YRange = "C2:C7"; width = 800; } -PivotTableDefinition @{Sales = @{
PivotRows = "City"; PivotColumns = "Product"; PivotData = @{Gross = "Sum"; Net = "Sum" }; PivotNumberFormat = "$#,##0.00"; PivotTotals = "Both"; PivotTableStyle = "Medium12"; Activate = $true PivotRows = "City"; PivotColumns = "Product"; PivotData = @{Gross = "Sum"; Net = "Sum" }; PivotNumberFormat = "$#,##0.00"; PivotTotals = "Both"; PivotTableStyle = "Medium12"; Activate = $true
PivotChartDefinition=@{Title="Gross and net by city and product"; ChartType="ColumnClustered"; Column=6; Width=600; Height=360; YMajorUnit=500; YMinorUnit=100; YAxisNumberformat="$#,##0"; LegendPosition="Bottom"}}} PivotChartDefinition = @{Title = "Gross and net by city and product"; ChartType = "ColumnClustered"; Column = 6; Width = 600; Height = 360; YMajorUnit = 500; YMinorUnit = 100; YAxisNumberformat = "$#,##0"; LegendPosition = "Bottom" }
}
}
$excel = Open-ExcelPackage $path $excel = Open-ExcelPackage $path
$ws1 = $excel.Workbook.Worksheets[1] $ws1 = $excel.Workbook.Worksheets[1]
$ws2 = $excel.Workbook.Worksheets[2] $ws2 = $excel.Workbook.Worksheets[2]
}
Context "Data Page" { Context "Data Page" {
It "Inserted the data and created the table " { It "Inserted the data and created the table " {
$ws1.Tables[0] | Should -Not -BeNullOrEmpty $ws1.Tables[0] | Should -Not -BeNullOrEmpty

View File

@@ -1,11 +1,9 @@
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments','',Justification='False Positives')] 
param()
$scriptPath = Split-Path -Path $MyInvocation.MyCommand.path -Parent
$dataPath = Join-Path -Path $scriptPath -ChildPath "First10Races.csv"
$WarningAction = "SilentlyContinue"
Describe "Creating small named ranges with hyperlinks" { Describe "Creating small named ranges with hyperlinks" {
BeforeAll { BeforeAll {
$scriptPath = $PSScriptRoot
$dataPath = Join-Path -Path $scriptPath -ChildPath "First10Races.csv"
$WarningAction = "SilentlyContinue"
$path = "TestDrive:\Results.xlsx" $path = "TestDrive:\Results.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue Remove-Item -Path $path -ErrorAction SilentlyContinue
#Read race results, and group by race name : export 1 row to get headers, leaving enough rows aboce to put in a link for each race #Read race results, and group by race name : export 1 row to get headers, leaving enough rows aboce to put in a link for each race

View File

@@ -19,7 +19,7 @@ $map = @{
(Get-ExcelColumnName 26).columnName | Should -Be 'Z' (Get-ExcelColumnName 26).columnName | Should -Be 'Z'
(Get-ExcelColumnName 27).columnName | Should -Be 'AA' (Get-ExcelColumnName 27).columnName | Should -Be 'AA'
(Get-ExcelColumnName 28).columnNamee | Should -Be 'AB' (Get-ExcelColumnName 28).columnName | Should -Be 'AB'
(Get-ExcelColumnName 30).columnName | Should -Be 'AD' (Get-ExcelColumnName 30).columnName | Should -Be 'AD'
(Get-ExcelColumnName 48).columnName | Should -Be 'AV' (Get-ExcelColumnName 48).columnName | Should -Be 'AV'

Some files were not shown because too many files have changed in this diff Show More