ImportExcel icon indicating copy to clipboard operation
ImportExcel copied to clipboard

Bug: Spreadsheet with data above StartRow causes column headers to be duplicated

Open dbrennand opened this issue 2 years ago • 7 comments

Hey @dfinke

Hope you're keeping well 🙂

I've noticed some odd behaviour using Import-Excel ... -StartRow 3 with an Excel spreadsheet which has the following layout:

Sheet1

image

There are no rows containing data after the table headers however, when I import this spreadsheet it produces the following output:

Import-Excel -Path "Issue.xlsx" -WorksheetName "Sheet1" -StartRow 3

# Output
System Name          :
RAID Group Name      :
RAID Level           :
# LUNs               :
# Disks              :
Raw Capacity (GB)    :
Usable Capacity (GB) :
Used Capacity (GB)   :
Free Capacity (GB)   :
Throughput (IOPS)    :
Defragmented (%)     :

System Name          : System Name
RAID Group Name      : RAID Group Name
RAID Level           : RAID Level
# LUNs               : # LUNs
# Disks              : # Disks
Raw Capacity (GB)    : Raw Capacity (GB)
Usable Capacity (GB) : Usable Capacity (GB)
Used Capacity (GB)   : Used Capacity (GB)
Free Capacity (GB)   : Free Capacity (GB)
Throughput (IOPS)    : Throughput (IOPS)
Defragmented (%)     : Defragmented (%)

Sheet1 (2)

image

This is working as expected and the warning is shown:

Import-Excel -Path "Issue.xlsx" -WorksheetName "Sheet1 (2)"
# Output
WARNING: Worksheet 'Sheet1 (2)' in workbook '...\Issue.xlsx' contains no data in the rows after top row '1'

I think this issue is related to there being some data above the StartRow 3 and the logic in this else statement of the Import-Excel cmdlet doesn't account for this case?

This issue occurs on the latest module version:

PS> gmo | where name -eq ImportExcel

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     7.8.6      ImportExcel                         {Add-ConditionalFormatting, Add-ExcelChart, Add-ExcelDataValidationRule, Add-ExcelName...}

dbrennand avatar Apr 11 '24 11:04 dbrennand

@dbrennand Thanks for using the Excel module.

My guess is the logic when using -StartRow does not pass thru the checks. Highly possible. That is early organic code.

No ETA on this.

dfinke avatar Apr 14 '24 11:04 dfinke

I did not dig enough deep but inserting expression if ($StartRow -eq $EndRow) {$rows = 0} after line 182 would resolve the issue and would give some hints to further exploration.

scriptingstudio avatar Apr 16 '24 15:04 scriptingstudio

Thanks @scriptingstudio for checking that. I'll put this on the list. Need to see if there are tests, doubt it.

dfinke avatar Apr 16 '24 17:04 dfinke

@scriptingstudio @dfinke - Pushed a fix for this in https://github.com/dfinke/ImportExcel/compare/master...dbrennand:ImportExcel:fix/%231587

With this change the expected warning is now showing:

Import-Excel -Path "Issue.xlsx" -WorksheetName "Sheet1" -StartRow 3
WARNING: Worksheet 'Sheet1' in workbook 'Issue.xlsx' contains no data in the rows after top row '3'

Previous behaviour is also preserved:

Import-Excel -Path "Issue.xlsx" -WorksheetName "Sheet1 (2)"
WARNING: Worksheet 'Sheet1 (2)' in workbook 'Issue.xlsx' contains no data in the rows after top row '1'

dbrennand avatar Apr 17 '24 07:04 dbrennand

Thanks @dbrennand! I just created a branch to take a look. Were you able to take a look at the tests to see if there were any that tested this code?

dfinke avatar Apr 17 '24 13:04 dfinke

Thanks @dbrennand! I just created a branch to take a look. Were you able to take a look at the tests to see if there were any that tested this code?

https://github.com/search?q=repo%3Adfinke%2FImportExcel%20path%3A%2F%5E__tests__%5C%2F%2F%20StartRow&type=code

There are a couple of tests which already include -StartRow - I will add the problematic workbook and include a new test for this.

dbrennand avatar May 26 '24 20:05 dbrennand

It needs additional tests.

dfinke avatar May 27 '24 12:05 dfinke

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.

stale[bot] avatar Apr 26 '25 05:04 stale[bot]