Excelimo.psm1
function Excel { [CmdletBinding()] param([Parameter(Position = 0)][ValidateNotNull()][ScriptBlock] $Content = $(Throw "Excel requires opening and closing brace."), [string] $FilePath, [switch] $Open, [switch] $Parallel) $Time = Start-TimeLog $ExcelDocument = New-ExcelDocument $Script:Excel = @{} $Script:Excel.ExcelDocument = $ExcelDocument $Script:Excel.Runspaces = @{} $Script:Excel.Runspaces.Parallel = $Parallel.IsPresent $Script:Excel.Runspaces.RunspacesPool = New-RunSpace $Script:Excel.Runspaces.Runspaces = [System.Collections.Generic.List[PSCustomObject]]::new() [Array] $Output = ConvertFrom-ScriptBlock -ScriptBlock $Content $WorkbookProperties = ConvertTo-ScriptBlock -Code $Output -Include 'WorkbookProperties' $Everything = ConvertTo-ScriptBlock -Code $Output -Exclude 'WorkbookProperties' if ($Everything) { & $Everything $Script:Excel.Runspaces.End = Stop-Runspace -Runspaces $Script:Excel.Runspaces.Runspaces -FunctionName "Excel" -RunspacePool $Script:RunspacesPool -Verbose:$Verbose -ErrorAction SilentlyContinue -ErrorVariable +AllErrors -ExtendedOutput:$ExtendedOutputF } if ($WorkbookProperties) {& $WorkbookProperties} $EndTime = Stop-TimeLog -Time $Time -Option OneLiner Save-ExcelDocument -ExcelDocument $ExcelDocument -FilePath $FilePath -OpenWorkBook:$Open $Script:Excel = $null Write-Verbose "Excel - Time to create - $EndTime" } function WorkbookProperties { [CmdletBinding()] param([string] $Title, [string] $Subject, [string] $Author, [string] $Comments, [string] $Keywords, [string] $LastModifiedBy, [string] $LastPrinted, [nullable[DateTime]] $Created, [string] $Category, [string] $Status, [string] $Application, [string] $HyperlinkBase, [string] $AppVersion, [string] $Company, [string] $Manager, [nullable[DateTime]] $Modified, [nullable[bool]] $LinksUpToDate, [nullable[bool]] $HyperlinksChanged, [nullable[bool]] $ScaleCrop, [nullable[bool]] $SharedDoc) $ExcelProperties = @{HyperlinksChanged = $HyperlinksChanged ScaleCrop = $ScaleCrop HyperlinkBase = $HyperlinkBase Subject = $Subject LastModifiedBy = $LastModifiedBy Author = $Author LinksUpToDate = $LinksUpToDate Modified = $Modified LastPrinted = $LastPrinted Company = $Company Comments = $Comments Title = $Title SharedDoc = $SharedDoc Created = $Created Category = $Category ExcelDocument = $Script:Excel.ExcelDocument Status = $Status AppVersion = $AppVersion Keywords = $Keywords Application = $Application Manager = $Manager } Set-ExcelProperties @ExcelProperties } function Worksheet { [CmdletBinding()] param([Array] $DataTable, [string] $Name, [ValidateSet("Replace", "Skip", "Rename")][string] $Option = 'Replace', [RGBColors] $TabColor = [RGBColors]::None, [switch] $AutoFilter, [switch] $AutoFit) $ScriptBlock = {Param ($ExcelDocument, [Array] $DataTable, [string] $Name, [ValidateSet("Replace", "Skip", "Rename")][string] $Option = 'Replace', [RGBColors] $TabColor = [RGBColors]::None, [bool] $Supress, [switch] $AutoFilter, [switch] $AutoFit) $addExcelWorkSheetDataSplat = @{DataTable = $DataTable TabColor = $TabColor Supress = $Supress Option = $Option ExcelDocument = $ExcelDocument ExcelWorksheetName = $Name AutoFit = $AutoFit AutoFilter = $AutoFilter } Add-ExcelWorkSheetData @addExcelWorkSheetDataSplat -Verbose} $ExcelWorkSheetParameters = [ordered] @{DataTable = $DataTable TabColor = $TabColor Supress = $true Option = $Option ExcelDocument = $Script:Excel.ExcelDocument Name = $Name AutoFit = $AutoFit AutoFilter = $AutoFilter } if ($Script:Excel.Runspaces.Parallel) { $RunSpace = Start-Runspace -ScriptBlock $ScriptBlock -Parameters $ExcelWorkSheetParameters -RunspacePool $Script:Excel.Runspaces.RunspacesPool -Verbose:$Verbose $Script:Excel.Runspaces.Runspaces.Add($RunSpace) } else {& $ScriptBlock -Parameters @ExcelWorkSheetParameters} } Export-ModuleMember -Function @('Excel', 'WorkbookProperties', 'Worksheet') -Alias @() |