mirror of
https://github.com/dfinke/ImportExcel.git
synced 2026-01-11 04:53:17 +00:00
Merge pull request #514 from dfinke/AddRemoveWorksheet-dcf
Add Remove-Workseet
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
RootModule = 'ImportExcel.psm1'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '5.4.2'
|
||||
ModuleVersion = '5.4.3'
|
||||
|
||||
# ID used to uniquely identify this module
|
||||
GUID = '60dd4136-feff-401a-ba27-a84458c57ede'
|
||||
|
||||
@@ -30,6 +30,7 @@ Add-Type -Path "$($PSScriptRoot)\EPPlus.dll"
|
||||
. $PSScriptRoot\Open-ExcelPackage.ps1
|
||||
. $PSScriptRoot\Pivot.ps1
|
||||
. $PSScriptRoot\PivotTable.ps1
|
||||
. $PSScriptRoot\RemoveWorksheet.ps1
|
||||
. $PSScriptRoot\Send-SQLDataToExcel.ps1
|
||||
. $PSScriptRoot\Set-CellStyle.ps1
|
||||
. $PSScriptRoot\Set-Column.ps1
|
||||
|
||||
@@ -53,6 +53,11 @@ Install-Module ImportExcel -scope CurrentUser
|
||||
Install-Module ImportExcel
|
||||
```
|
||||
|
||||
# What's new 5.4.3
|
||||
|
||||
- Added Remove-Worksheet: Removes one or more worksheets from one or more workbooks
|
||||
|
||||
|
||||
# What's new 5.4.2
|
||||
|
||||
- Added parameters -GroupDateRow and -GroupDatePart & -GroupNumericRow, -GroupNumericMin, -GroupNumericMax and -GroupNumericInterval
|
||||
|
||||
@@ -1,34 +1,43 @@
|
||||
Function Remove-WorkSheet {
|
||||
Param (
|
||||
$Path,
|
||||
$WorksheetName
|
||||
<#
|
||||
.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(ValueFromPipelineByPropertyName)]
|
||||
[Parameter(ValueFromPipelineByPropertyName)]
|
||||
[Alias('Path')]
|
||||
$FullName,
|
||||
[String[]]$WorksheetName = "Sheet1",
|
||||
[Switch]$Show
|
||||
)
|
||||
|
||||
$Path = (Resolve-Path $Path).ProviderPath
|
||||
|
||||
$Excel = New-Object -TypeName OfficeOpenXml.ExcelPackage $Path
|
||||
|
||||
$workSheet = $Excel.Workbook.Worksheets[$WorkSheetName]
|
||||
|
||||
if($workSheet) {
|
||||
if($Excel.Workbook.Worksheets.Count -gt 1) {
|
||||
$Excel.Workbook.Worksheets.Delete($workSheet)
|
||||
} else {
|
||||
throw "Cannot delete $WorksheetName. A workbook must contain at least one visible worksheet"
|
||||
Process {
|
||||
if (!$FullName) {
|
||||
throw "Remove-WorkSheet requires the and Excel file"
|
||||
}
|
||||
|
||||
} else {
|
||||
throw "$WorksheetName not found"
|
||||
$pkg = Open-ExcelPackage -Path $FullName
|
||||
|
||||
if ($pkg) {
|
||||
foreach ($wsn in $WorksheetName) {
|
||||
$pkg.Workbook.Worksheets.Delete($wsn)
|
||||
}
|
||||
|
||||
Close-ExcelPackage -ExcelPackage $pkg -Show:$Show
|
||||
}
|
||||
}
|
||||
|
||||
$Excel.Save()
|
||||
$Excel.Dispose()
|
||||
}
|
||||
|
||||
|
||||
Import-Module .\ImportExcel.psd1 -Force
|
||||
|
||||
$names = Get-ExcelSheetInfo C:\Temp\testDelete.xlsx
|
||||
$names | Foreach-Object { Remove-WorkSheet C:\Temp\testDelete.xlsx $_.Name}
|
||||
|
||||
##Remove-WorkSheet C:\Temp\testDelete.xlsx sheet6
|
||||
}
|
||||
78
__tests__/Remove-WorkSheet.tests.ps1
Normal file
78
__tests__/Remove-WorkSheet.tests.ps1
Normal file
@@ -0,0 +1,78 @@
|
||||
#Requires -Modules Pester
|
||||
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
|
||||
Describe "Remove Worksheet" {
|
||||
Context "Remove a worksheet output" {
|
||||
BeforeEach {
|
||||
# Create three sheets
|
||||
$data = ConvertFrom-Csv @"
|
||||
Name,Age
|
||||
Jane,10
|
||||
John,20
|
||||
"@
|
||||
$xlFile1 = "$env:TEMP\RemoveWorsheet1.xlsx"
|
||||
Remove-Item $xlFile1 -ErrorAction SilentlyContinue
|
||||
|
||||
$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 $xlFile1 -WorksheetName Target2
|
||||
|
||||
$actual = Get-ExcelSheetInfo -Path $xlFile1
|
||||
|
||||
$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"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user