diff --git a/RemoveWorksheet.ps1 b/RemoveWorksheet.ps1 index 6533d48..06c6a9c 100644 --- a/RemoveWorksheet.ps1 +++ b/RemoveWorksheet.ps1 @@ -1,19 +1,43 @@ Function Remove-WorkSheet { + <# + .SYNOPSIS + Removes one or more worksheets from one or more workbooks + .EXAMPLE + C:\> Remove-WorkSheet -Path Test1.xlsx -WorksheetName Sheet1 + Removes the worksheet named 'Sheet1' from 'Test1.xlsx' + + C:\> Remove-WorkSheet -Path Test1.xlsx -WorksheetName Sheet1,Target1 + Removes the worksheet named 'Sheet1' and 'Target1' from 'Test1.xlsx' + + C:\> Remove-WorkSheet -Path Test1.xlsx -WorksheetName Sheet1,Target1 -Show + Removes the worksheets and then launches the xlsx in Excel + + C:\> dir c:\reports\*.xlsx | Remove-WorkSheet + Removes 'Sheet1' from all the xlsx files in the c:\reports directory + +#> param( - [Parameter(Mandatory)] - $Path, - [Parameter(Mandatory)] - [String[]]$WorksheetName, + # [Parameter(ValueFromPipelineByPropertyName)] + [Parameter(ValueFromPipelineByPropertyName)] + [Alias('Path')] + $FullName, + [String[]]$WorksheetName = "Sheet1", [Switch]$Show ) - $pkg = Open-ExcelPackage -Path $Path - - if ($pkg) { - foreach ($wsn in $WorksheetName) { - $pkg.Workbook.Worksheets.Delete($wsn) + Process { + if (!$FullName) { + throw "Remove-WorkSheet requires the and Excel file" } - Close-ExcelPackage -ExcelPackage $pkg -Show:$Show + $pkg = Open-ExcelPackage -Path $FullName + + if ($pkg) { + foreach ($wsn in $WorksheetName) { + $pkg.Workbook.Worksheets.Delete($wsn) + } + + Close-ExcelPackage -ExcelPackage $pkg -Show:$Show + } } } \ No newline at end of file diff --git a/__tests__/Remove-WorkSheet.tests.ps1 b/__tests__/Remove-WorkSheet.tests.ps1 index b4babc4..bf39a13 100644 --- a/__tests__/Remove-WorkSheet.tests.ps1 +++ b/__tests__/Remove-WorkSheet.tests.ps1 @@ -3,26 +3,76 @@ Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force Describe "Remove Worksheet" { Context "Remove a worksheet output" { - BeforeAll { + BeforeEach { # Create three sheets $data = ConvertFrom-Csv @" +Name,Age +Jane,10 +John,20 "@ - $xlFile = "$env:TEMP\RemoveWorsheet.xlsx" - Remove-Item $xlFile -ErrorAction SilentlyContinue + $xlFile1 = "$env:TEMP\RemoveWorsheet1.xlsx" + Remove-Item $xlFile1 -ErrorAction SilentlyContinue - $data | Export-Excel -Path $xlFile -WorksheetName Target1 - $data | Export-Excel -Path $xlFile -WorksheetName Target2 - $data | Export-Excel -Path $xlFile -WorksheetName Target3 + $data | Export-Excel -Path $xlFile1 -WorksheetName Target1 + $data | Export-Excel -Path $xlFile1 -WorksheetName Target2 + $data | Export-Excel -Path $xlFile1 -WorksheetName Target3 + $data | Export-Excel -Path $xlFile1 -WorksheetName Sheet1 + + $xlFile2 = "$env:TEMP\RemoveWorsheet2.xlsx" + Remove-Item $xlFile2 -ErrorAction SilentlyContinue + + $data | Export-Excel -Path $xlFile2 -WorksheetName Target1 + $data | Export-Excel -Path $xlFile2 -WorksheetName Target2 + $data | Export-Excel -Path $xlFile2 -WorksheetName Target3 + $data | Export-Excel -Path $xlFile2 -WorksheetName Sheet1 + } + + it "Should throw about the Path" { + {Remove-WorkSheet} | Should throw 'Remove-WorkSheet requires the and Excel file' } it "Should delete Target2" { - Remove-WorkSheet -Path $xlFile -WorksheetName Target2 + Remove-WorkSheet -Path $xlFile1 -WorksheetName Target2 - $actual = Get-ExcelSheetInfo -Path $xlFile + $actual = Get-ExcelSheetInfo -Path $xlFile1 - $actual.Count | Should Be 2 + $actual.Count | Should Be 3 $actual[0].Name | Should Be "Target1" $actual[1].Name | Should Be "Target3" + $actual[2].Name | Should Be "Sheet1" + } + + it "Should delete Sheet1" { + Remove-WorkSheet -Path $xlFile1 + + $actual = Get-ExcelSheetInfo -Path $xlFile1 + + $actual.Count | Should Be 3 + $actual[0].Name | Should Be "Target1" + $actual[1].Name | Should Be "Target2" + $actual[2].Name | Should Be "Target3" + } + + it "Should delete multiple sheets" { + Remove-WorkSheet -Path $xlFile1 -WorksheetName Target1, Sheet1 + + $actual = Get-ExcelSheetInfo -Path $xlFile1 + + $actual.Count | Should Be 2 + $actual[0].Name | Should Be "Target2" + $actual[1].Name | Should Be "Target3" + } + + it "Should delete sheet from multiple workbooks" { + + Get-ChildItem "$env:TEMP\RemoveWorsheet*.xlsx" | Remove-WorkSheet + + $actual = Get-ExcelSheetInfo -Path $xlFile1 + + $actual.Count | Should Be 3 + $actual[0].Name | Should Be "Target1" + $actual[1].Name | Should Be "Target2" + $actual[2].Name | Should Be "Target3" } } } \ No newline at end of file