Functions/Add-RowToExcelSheet.ps1

<#
    .SYNOPSIS
    Add a new row to an Excel table
    Related to: General
    .DESCRIPTION
    Executed tasks:
        - Open the Excel file
        - Open the Excel sheet
        - Check if table exists
        - Increment row identifier (if enabled)
        - Insert a new row based on the ExcelColumnValuesInRow
        - Save and close Excel file
        - Display all actions (if DebugExcel is enabled)
    Preconditions:
        - File path has to be retreived
        - Excel sheet name has to be retreived
        - Excel column values in row has to be specified
#>

function AddRowToExcelTable() {
    [cmdletbinding()]
    Param
    (
        [parameter(Mandatory = $true)]
        [string] $FilePath,
        [parameter(Mandatory = $true)]
        [string] $ExcelSheetName,
        [parameter(Mandatory = $true)]
        [string[]] $ExcelColumnValuesInRow,
        [parameter(Mandatory = $false)]
        [boolean] $IncrementRowIdentifier = $true,
        [parameter(Mandatory = $false)]
        [boolean] $DebugExcel = $false
    )
    PROCESS {

        [Microsoft.Office.Interop.Excel.ApplicationClass]$Excel = New-Object -ComObject "Excel.Application"
        $Excel.Visible = $DebugExcel
        $Excel.ScreenUpdating = $DebugExcel
        $Excel.displayAlerts = $DebugExcel
 

        Write-Verbose "NOTE: Opening Excell worksheet"
        $ExcelWorkBook = $Excel.Workbooks.Open("$($FilePath)", 0, $false)
        
        $ExcelWorkSheet = $ExcelWorkBook.Worksheets.Item($ExcelSheetName) 
        $ExcelWorkSheet.activate()

        $LastRowInTableNumber = [int]$ExcelWorkSheet.UsedRange.rows.count;
        $NewRowInTableNumber = [int]$ExcelWorkSheet.UsedRange.rows.count + 1

        if (!($LastRowInTableNumber -gt 1)) {
            Write-verbose 'ERROR: Please make sure to add an table header.'
            break;
        }

        if ($IncrementRowIdentifier) {
        
            if (!$ExcelColumnValuesInRow -is [int]) {
                Write-Verbose 'Please make sure that the row identifier is of type integer.'
                break;
            }
        
            $LastRowIdentifier = $ExcelWorkSheet.Cells.Item($LastRowInTableNumber, 1).Text
            $NewRowIdentifier = [int]$LastRowIdentifier + 1;
            $ExcelColumnValuesInRow[0] = $NewRowIdentifier
        }
        
        for ($i = 0; $i -lt $ExcelColumnValuesInRow.Count; $i++) {
            $ExcelWorkSheet.Cells.Item($NewRowInTableNumber, $i + 1) = $ExcelColumnValuesInRow[$i]
            Write-Progress -Activity "Inserting request column in Excell" -Status "$i% Complete:" -PercentComplete $i;
        }
        Write-Verbose 'NOTE: Inserted new row in Excel sheet'

        $ExcelWorkBook.SaveAs($FilePath) 
        $Excel.Workbooks.Close()
        $Excel.Quit() 
        [GC]::Collect()
        Write-Verbose "NOTE: Excell worksheet saved and closed"     

        return $ExcelColumnValuesInRow
    }
}
Export-ModuleMember -Function AddRowToExcelTable