From aea90aa8d608bebec638c6ae43518eea03d9cc85 Mon Sep 17 00:00:00 2001 From: dfinke Date: Tue, 3 May 2022 17:53:58 -0400 Subject: [PATCH] Fix reading multiple sheets in the xlsx where row/col count is diff --- Public/Import-Excel.ps1 | 6 ++++-- .../ImportExcelReadSheets.tests.ps1 | 10 ++++++++++ __tests__/ImportExcelTests/construction.xlsx | Bin 0 -> 25337 bytes 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 __tests__/ImportExcelTests/construction.xlsx diff --git a/Public/Import-Excel.ps1 b/Public/Import-Excel.ps1 index b9574e7..fe2df9f 100644 --- a/Public/Import-Excel.ps1 +++ b/Public/Import-Excel.ps1 @@ -134,6 +134,8 @@ $xlBook = [Ordered]@{} foreach ($sheet in $Worksheet) { + $EndRow = 0 + $EndColumn = 0 $targetSheetname = $sheet.Name $xlBook["$targetSheetname"] = @() #region Get rows and columns @@ -233,8 +235,8 @@ } catch { throw "Failed importing the Excel workbook '$Path' with worksheet '$WorksheetName': $_"; return } finally { - $EndRow = 0 - $EndColumn = 0 + # $EndRow = 0 + # $EndColumn = 0 if ($Path) { $stream.close(); $ExcelPackage.Dispose() } if ($NotAsDictionary) { diff --git a/__tests__/ImportExcelTests/ImportExcelReadSheets.tests.ps1 b/__tests__/ImportExcelTests/ImportExcelReadSheets.tests.ps1 index 92d1589..6d70e85 100644 --- a/__tests__/ImportExcelTests/ImportExcelReadSheets.tests.ps1 +++ b/__tests__/ImportExcelTests/ImportExcelReadSheets.tests.ps1 @@ -59,5 +59,15 @@ Describe 'Different ways to import sheets' -Tag ImportExcelReadSheets { $group[0].Name | Should -BeExactly 'April' $group[1].Name | Should -BeExactly 'June' } + + It "Should read multiple sheets with diff number of rows correctly" { + $xlFilename = "$PSScriptRoot\construction.xlsx" + + $actual = Import-Excel $xlFilename 2015, 2016 + $actual.keys.Count | Should -Be 2 + + $actual["2015"].Count | Should -Be 12 + $actual["2016"].Count | Should -Be 1 + } } } \ No newline at end of file diff --git a/__tests__/ImportExcelTests/construction.xlsx b/__tests__/ImportExcelTests/construction.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..befd778debd102b3173b960ef611103c239d2308 GIT binary patch literal 25337 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 lXIU3MHTl~xbr3Ml7bhwz3TOc7AR&