diff --git a/ImportExcel.psd1 b/ImportExcel.psd1 index df9676a..8a267c3 100644 --- a/ImportExcel.psd1 +++ b/ImportExcel.psd1 @@ -6,7 +6,7 @@ RootModule = 'ImportExcel.psm1' # Version number of this module. - ModuleVersion = '7.2.3' + ModuleVersion = '7.3.0' # ID used to uniquely identify this module GUID = '60dd4136-feff-401a-ba27-a84458c57ede' diff --git a/Public/Open-ExcelPackage.ps1 b/Public/Open-ExcelPackage.ps1 index a645e07..7c0d077 100644 --- a/Public/Open-ExcelPackage.ps1 +++ b/Public/Open-ExcelPackage.ps1 @@ -1,10 +1,10 @@ -function Open-ExcelPackage { +function Open-ExcelPackage { [CmdLetBinding()] - [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword","")] + [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword", "")] [OutputType([OfficeOpenXml.ExcelPackage])] param( #The path to the file to open. - [Parameter(Mandatory=$true)]$Path, + [Parameter(Mandatory = $true)]$Path, #If specified, any running instances of Excel will be terminated before opening the file. [switch]$KillExcel, #The password for a protected worksheet, as a [normal] string (not a secure string). @@ -13,7 +13,7 @@ [switch]$Create ) - if($KillExcel) { + if ($KillExcel) { Get-Process -Name "excel" -ErrorAction Ignore | Stop-Process while (Get-Process -Name "excel" -ErrorAction Ignore) {} } @@ -24,21 +24,26 @@ #Create the directory if required. $targetPath = Split-Path -Parent -Path $Path if (!(Test-Path -Path $targetPath)) { - Write-Debug "Base path $($targetPath) does not exist, creating" - $null = New-item -ItemType Directory -Path $targetPath -ErrorAction Ignore + Write-Debug "Base path $($targetPath) does not exist, creating" + $null = New-item -ItemType Directory -Path $targetPath -ErrorAction Ignore } New-Object -TypeName OfficeOpenXml.ExcelPackage -ArgumentList $Path } elseif (Test-Path -Path $path) { - if ($Password) {$pkgobj = New-Object -TypeName OfficeOpenXml.ExcelPackage -ArgumentList $Path , $Password } - else {$pkgobj = New-Object -TypeName OfficeOpenXml.ExcelPackage -ArgumentList $Path } + if ($Password) { $pkgobj = New-Object -TypeName OfficeOpenXml.ExcelPackage -ArgumentList $Path , $Password } + else { $pkgobj = New-Object -TypeName OfficeOpenXml.ExcelPackage -ArgumentList $Path } if ($pkgobj) { foreach ($w in $pkgobj.Workbook.Worksheets) { $sb = [scriptblock]::Create(('$this.workbook.Worksheets["{0}"]' -f $w.name)) - Add-Member -InputObject $pkgobj -MemberType ScriptProperty -Name $w.name -Value $sb + try { + Add-Member -InputObject $pkgobj -MemberType ScriptProperty -Name $w.name -Value $sb -ErrorAction Stop + } + catch { + Write-Warning "Could not add sheet $($w.name) as 'short cut', you need to access it via `$wb.Worksheets['$($w.name)'] " + } } return $pkgobj } } - else {Write-Warning "Could not find $path" } - } + else { Write-Warning "Could not find $path" } +} diff --git a/__tests__/Open-ExcelPackage.tests.ps1 b/__tests__/Open-ExcelPackage.tests.ps1 new file mode 100644 index 0000000..1056bcb --- /dev/null +++ b/__tests__/Open-ExcelPackage.tests.ps1 @@ -0,0 +1,39 @@ +#Requires -Modules Pester + +if (-not (Get-command Import-Excel -ErrorAction SilentlyContinue)) { + Import-Module $PSScriptRoot\..\ImportExcel.psd1 +} + +<# +Methods +------- +Dispose +Equals +GetAsByteArray +GetHashCode +GetType +Load +Save +SaveAs +ToString + +Properties +---------- + +Compatibility +Compression +DoAdjustDrawings +Encryption +File +Package +Stream +Workbook +#> + +Describe "Test Open Excel Package" -Tag Open-ExcelPackage { + It "Should handle opening a workbook with Worksheet Names that will cause errors" { + $xlFilename = "$PSScriptRoot\UnsupportedWorkSheetNames.xlsx" + + { Open-ExcelPackage -Path $xlFilename -ErrorAction Stop } | Should -Not -Throw + } +} \ No newline at end of file diff --git a/__tests__/UnsupportedWorkSheetNames.xlsx b/__tests__/UnsupportedWorkSheetNames.xlsx new file mode 100644 index 0000000..b27620b Binary files /dev/null and b/__tests__/UnsupportedWorkSheetNames.xlsx differ diff --git a/changelog.md b/changelog.md index 915b810..bf200b8 100644 --- a/changelog.md +++ b/changelog.md @@ -1,8 +1,11 @@ +# v7.3.0 + +- Fix throwing error when a Worksheet name collides with a method, or property name on the `OfficeOpenXml.ExcelPackage` package + # v7.2.3 - Fix inline help, thank you [Wes Stahler](https://github.com/stahler) - # v7.2.2 - Improved checks for Linux, Mac and PS 5.1