From 9790cb958c63e53c28aadf562fa5f67505dc549e Mon Sep 17 00:00:00 2001 From: DarkLite1 Date: Wed, 8 Feb 2017 09:51:13 +0100 Subject: [PATCH] Revert "Revert "Added 'DataOnly' parameter"" This reverts commit 782c027960cd283f627d3315a89c44818e8ef2ac. --- ImportExcel.psm1 | 66 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 13 deletions(-) diff --git a/ImportExcel.psm1 b/ImportExcel.psm1 index 72a7a99..756362f 100644 --- a/ImportExcel.psm1 +++ b/ImportExcel.psm1 @@ -78,7 +78,8 @@ function Import-Excel { $WorkSheetname=1, [int]$HeaderRow=1, [string[]]$Header, - [switch]$NoHeader + [switch]$NoHeader, + [switch]$DataOnly ) Process { @@ -98,14 +99,33 @@ function Import-Excel { $Columns=$dimension.Columns if($NoHeader) { - foreach ($Row in 0..($Rows-1)) { - $newRow = [Ordered]@{} - foreach ($Column in 0..($Columns-1)) { - $propertyName = "P$($Column+1)" - $newRow.$propertyName = $worksheet.Cells[($Row+1),($Column+1)].Value - } + if ($DataOnly) { + $CellsWithValues = $worksheet.Cells | where Value - [PSCustomObject]$newRow + $Script:i = 0 + $ColumnReference = $CellsWithValues | Select-Object -ExpandProperty End | Group-Object Column | + Select-Object @{L='Column';E={$_.Name}}, @{L='NewColumn';E={$Script:i++; $Script:i}} + + $CellsWithValues | Select-Object -ExpandProperty End | Group-Object Row | ForEach-Object { + $newRow = [Ordered]@{} + + foreach ($C in $ColumnReference) { + $newRow."P$($C.NewColumn)" = $worksheet.Cells[($_.Name),($C.Column)].Value + } + + [PSCustomObject]$newRow + } + } + else { + foreach ($Row in 0..($Rows-1)) { + $newRow = [Ordered]@{} + foreach ($Column in 0..($Columns-1)) { + $propertyName = "P$($Column+1)" + $newRow.$propertyName = $worksheet.Cells[($Row+1),($Column+1)].Value + } + + [PSCustomObject]$newRow + } } } else { if(!$Header) { @@ -116,16 +136,36 @@ function Import-Excel { if($Rows -eq 1) { $Header | ForEach {$h=[Ordered]@{}} {$h.$_=''} {[PSCustomObject]$h} - } else { - foreach ($Row in ($HeaderRow+1)..$Rows) { - $h=[Ordered]@{} - foreach ($Column in 0..($Columns-1)) { + } + else { + if ($DataOnly) { + $CellsWithValues = $worksheet.Cells | where Value + + $Script:i = -1 + $ColumnReference = $CellsWithValues | Select-Object -ExpandProperty End | Group-Object Column | + Select-Object @{L='Column';E={$_.Name}}, @{L='NewColumn';E={$Script:i++; $Header[$Script:i]}} + + $CellsWithValues | Select-Object -ExpandProperty End | Group-Object Row | ForEach-Object { + $newRow = [Ordered]@{} + + foreach ($C in $ColumnReference) { + $newRow."$($C.NewColumn)" = $worksheet.Cells[($_.Name),($C.Column)].Value + } + + [PSCustomObject]$newRow + } + } + else { + foreach ($Row in ($HeaderRow+1)..$Rows) { + $h=[Ordered]@{} + foreach ($Column in 0..($Columns-1)) { if($Header[$Column].Length -gt 0) { $Name = $Header[$Column] $h.$Name = $worksheet.Cells[$Row,($Column+1)].Value } } - [PSCustomObject]$h + [PSCustomObject]$h + } } } }