-
Notifications
You must be signed in to change notification settings - Fork 410
/
Copy pathConvertFrom-ExcelSheet.ps1
43 lines (36 loc) · 1.44 KB
/
ConvertFrom-ExcelSheet.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function ConvertFrom-ExcelSheet {
[CmdletBinding()]
[Alias("Export-ExcelSheet")]
param (
[Parameter(Mandatory = $true)]
[String]$Path,
[String]$OutputPath = '.\',
[String]$SheetName = "*",
[ValidateSet('ASCII', 'BigEndianUniCode','Default','OEM','UniCode','UTF32','UTF7','UTF8')]
[string]$Encoding = 'UTF8',
[ValidateSet('.txt', '.log','.csv')]
[string]$Extension = '.csv',
[ValidateSet(';', ',')]
[string]$Delimiter ,
$Property = "*",
$ExcludeProperty = @(),
[switch]$Append,
[string[]]$AsText = @(),
[string[]]$AsDate = @()
)
$Path = (Resolve-Path $Path).ProviderPath
$xl = New-Object -TypeName OfficeOpenXml.ExcelPackage -ArgumentList $Path
$workbook = $xl.Workbook
$targetSheets = $workbook.Worksheets | Where-Object {$_.Name -Like $SheetName}
$csvParams = @{NoTypeInformation = $true} + $PSBoundParameters
foreach ($p in 'OutputPath', 'SheetName', 'Extension', 'Property','ExcludeProperty', 'AsText','AsDate') {
$csvParams.Remove($p)
}
Foreach ($sheet in $targetSheets) {
Write-Verbose "Exporting sheet: $($sheet.Name)"
$csvParams.Path = "$OutputPath\$($Sheet.Name)$Extension"
Import-Excel -ExcelPackage $xl -Sheet $($sheet.Name) -AsText:$AsText -AsDate:$AsDate |
Select-Object -Property $Property | Export-Csv @csvparams
}
$xl.Dispose()
}