Save-XLFile.ps1

Function Save-XLFile {
[CmdletBinding()]
[OutputType([XLFile], ParameterSetName = "File")]
[OutputType([XLSheet], ParameterSetName = "Sheet")]
param(
    [Parameter(ParameterSetName = "File", Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
    [XLFile]$File,
    [Parameter(ParameterSetName = "Sheet", Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
    [XLSheet]$Sheet,
    
    [switch]$PassThru = $false
)
begin{}
process{
    $package = $null
    if ($PSCmdlet.ParameterSetName -eq "File") {
        $package = $File.Package;
    } else {
        $package = $Sheet.Owner
    }
    
    if ($package -eq $null)
    {
        throw "Unable to save, no ExcelPackage found."
    }
    
    $package.Save();
    
    if ($PassThru.IsPresent) {
        if ($PSCmdlet.ParameterSetName -eq "File") {
            Write-Output -InputObject $File
        } else {
            Write-Output -InputObject $Sheet
        }
    } 
}
end {
}
}