-
Notifications
You must be signed in to change notification settings - Fork 400
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #713 from dfinke/FixImportExcelHeaders
Fix import excel headers
- Loading branch information
Showing
2 changed files
with
213 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,196 @@ | ||
$xlfile = "TestDrive:\testImportExcel.xlsx" | ||
|
||
Describe "Import-Excel on a sheet with no headings" { | ||
BeforeAll { | ||
|
||
$xl = "" | export-excel $xlfile -PassThru | ||
|
||
Set-Format -WorkSheet $xl.Sheet1 -Range A1 -Value 'A' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range B1 -Value 'B' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range C1 -Value 'C' | ||
|
||
Set-Format -WorkSheet $xl.Sheet1 -Range A2 -Value 'D' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range B2 -Value 'E' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range C2 -Value 'F' | ||
|
||
Set-Format -WorkSheet $xl.Sheet1 -Range A3 -Value 'G' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range B3 -Value 'H' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range C3 -Value 'I' | ||
|
||
Close-ExcelPackage $xl | ||
} | ||
|
||
It "Import-Excel should have this shape" { | ||
$actual = @(Import-Excel $xlfile) | ||
|
||
$actualNames = $actual[0].psobject.properties.name | ||
|
||
$actualNames.Count | Should Be 3 | ||
$actualNames[0] | Should BeExactly 'A' | ||
$actualNames[1] | Should BeExactly 'B' | ||
$actualNames[2] | Should BeExactly 'C' | ||
|
||
$actual.Count | Should Be 2 | ||
$actual[0].A | Should BeExactly 'D' | ||
$actual[0].B | Should BeExactly 'E' | ||
$actual[0].C | Should BeExactly 'F' | ||
} | ||
|
||
It "Import-Excel -NoHeader should have this shape" { | ||
$actual = @(Import-Excel $xlfile -NoHeader) | ||
|
||
$actualNames = $actual[0].psobject.properties.name | ||
|
||
$actualNames.Count | Should Be 3 | ||
$actualNames[0] | Should BeExactly 'P1' | ||
$actualNames[1] | Should BeExactly 'P2' | ||
$actualNames[2] | Should BeExactly 'P3' | ||
|
||
$actual.Count | Should Be 3 | ||
} | ||
|
||
It "Import-Excel -HeaderName should have this shape" { | ||
$actual = @(Import-Excel $xlfile -HeaderName 'Q', 'R', 'S') | ||
|
||
$actualNames = $actual[0].psobject.properties.name | ||
|
||
$actualNames.Count | Should Be 3 | ||
$actualNames[0] | Should BeExactly 'Q' | ||
$actualNames[1] | Should BeExactly 'R' | ||
$actualNames[2] | Should BeExactly 'S' | ||
|
||
$actual.Count | Should Be 3 | ||
|
||
$actual[0].Q | Should BeExactly 'A' | ||
$actual[0].R | Should BeExactly 'B' | ||
$actual[0].S | Should BeExactly 'C' | ||
|
||
$actual[1].Q | Should BeExactly 'D' | ||
$actual[1].R | Should BeExactly 'E' | ||
$actual[1].S | Should BeExactly 'F' | ||
} | ||
|
||
It "Should work with StartRow" { | ||
$actual = @(Import-Excel $xlfile -HeaderName 'Q', 'R', 'S' -startrow 2) | ||
|
||
$actualNames = $actual[0].psobject.properties.name | ||
|
||
$actualNames.Count | Should Be 3 | ||
$actualNames[0] | Should BeExactly 'Q' | ||
$actualNames[1] | Should BeExactly 'R' | ||
$actualNames[2] | Should BeExactly 'S' | ||
|
||
$actual.Count | Should Be 2 | ||
|
||
$actual[0].Q | Should BeExactly 'D' | ||
$actual[0].R | Should BeExactly 'E' | ||
$actual[0].S | Should BeExactly 'F' | ||
|
||
$actual[1].Q | Should BeExactly 'G' | ||
$actual[1].R | Should BeExactly 'H' | ||
$actual[1].S | Should BeExactly 'I' | ||
|
||
} | ||
|
||
It "Should work with -NoHeader" { | ||
$actual = @(Import-Excel $xlfile -NoHeader) | ||
$actualNames = $actual[0].psobject.properties.name | ||
|
||
$actualNames.Count | Should Be 3 | ||
$actualNames[0] | Should BeExactly 'P1' | ||
$actualNames[1] | Should BeExactly 'P2' | ||
$actualNames[2] | Should BeExactly 'P3' | ||
|
||
$actual.Count | Should Be 3 | ||
|
||
$actual[0].P1 | Should BeExactly 'A' | ||
$actual[0].P2 | Should BeExactly 'B' | ||
$actual[0].P3 | Should BeExactly 'C' | ||
|
||
$actual[1].P1 | Should BeExactly 'D' | ||
$actual[1].P2 | Should BeExactly 'E' | ||
$actual[1].P3 | Should BeExactly 'F' | ||
|
||
$actual[2].P1 | Should BeExactly 'G' | ||
$actual[2].P2 | Should BeExactly 'H' | ||
$actual[2].P3 | Should BeExactly 'I' | ||
} | ||
|
||
It "Should work with -NoHeader -DataOnly" { | ||
$actual = @(Import-Excel $xlfile -NoHeader -DataOnly) | ||
$actualNames = $actual[0].psobject.properties.name | ||
|
||
$actualNames.Count | Should Be 3 | ||
$actualNames[0] | Should BeExactly 'P1' | ||
$actualNames[1] | Should BeExactly 'P2' | ||
$actualNames[2] | Should BeExactly 'P3' | ||
|
||
$actual.Count | Should Be 3 | ||
|
||
$actual[0].P1 | Should BeExactly 'A' | ||
$actual[0].P2 | Should BeExactly 'B' | ||
$actual[0].P3 | Should BeExactly 'C' | ||
|
||
$actual[1].P1 | Should BeExactly 'D' | ||
$actual[1].P2 | Should BeExactly 'E' | ||
$actual[1].P3 | Should BeExactly 'F' | ||
|
||
$actual[2].P1 | Should BeExactly 'G' | ||
$actual[2].P2 | Should BeExactly 'H' | ||
$actual[2].P3 | Should BeExactly 'I' | ||
} | ||
|
||
It "Should work with -HeaderName -DataOnly -StartRow" { | ||
$actual = @(Import-Excel $xlfile -HeaderName 'Q', 'R', 'S' -DataOnly -StartRow 2) | ||
$actualNames = $actual[0].psobject.properties.name | ||
|
||
$actualNames.Count | Should Be 3 | ||
$actualNames[0] | Should BeExactly 'Q' | ||
$actualNames[1] | Should BeExactly 'R' | ||
$actualNames[2] | Should BeExactly 'S' | ||
|
||
$actual.Count | Should Be 1 | ||
|
||
$actual[0].Q | Should BeExactly 'G' | ||
$actual[0].R | Should BeExactly 'H' | ||
$actual[0].S | Should BeExactly 'I' | ||
} | ||
|
||
It "Should" { | ||
$xlfile = "TestDrive:\testImportExcelSparse.xlsx" | ||
$xl = "" | export-excel $xlfile -PassThru | ||
|
||
Set-Format -WorkSheet $xl.Sheet1 -Range A1 -Value 'Chuck' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range B1 -Value '' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range C1 -Value 'Norris' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range D1 -Value 'California' | ||
|
||
Set-Format -WorkSheet $xl.Sheet1 -Range A2 -Value '' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range B2 -Value '' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range C2 -Value '' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range D2 -Value '' | ||
|
||
Set-Format -WorkSheet $xl.Sheet1 -Range A3 -Value 'Jean-Claude' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range B3 -Value '' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range C3 -Value 'Vandamme' | ||
Set-Format -WorkSheet $xl.Sheet1 -Range D3 -Value 'Brussels' | ||
|
||
Close-ExcelPackage $xl | ||
|
||
$actual = @(Import-Excel -Path $xlfile -DataOnly -HeaderName 'FirstName', 'SecondName', 'City' -StartRow 2) | ||
$actualNames = $actual[0].psobject.properties.name | ||
|
||
$actualNames.Count | Should Be 3 | ||
$actualNames[0] | Should BeExactly 'FirstName' | ||
$actualNames[1] | Should BeExactly 'SecondName' | ||
$actualNames[2] | Should BeExactly 'City' | ||
|
||
$actual.Count | Should Be 1 | ||
|
||
# Looks like -DataOnly does not handle empty columns | ||
# $actual[0].FirstName | Should BeExactly 'Jean-Claude' | ||
# $actual[0].SecondName | Should BeExactly 'Vandamme' | ||
# $actual[0].City | Should BeExactly 'Brussels' | ||
} | ||
|
||
} |