Ready to get started?

Download a free trial of the Excel Data Provider to get started:

 Download Now

Learn more:

Microsoft Excel Icon Excel ADO.NET Provider

Easily connect .NET applications with real-time data from Excel spreadsheets. Use Excel to manage the data that powers your applications.

Automate Excel Integration Tasks from PowerShell

Are you in search of a quick and easy way to access Excel data from PowerShell? This article demonstrates how to utilize the Excel Cmdlets for tasks like connecting to Excel data, automating operations, downloading data, and more.

The CData Cmdlets for Excel are standard PowerShell cmdlets that make it easy to accomplish data cleansing, normalization, backup, and other integration tasks by enabling real-time and bidirectional access to Excel.

PowerShell Cmdlets or ADO.NET Provider?

The Cmdlets are not only a PowerShell interface to Excel, but also an SQL interface; this tutorial shows how to use both to create, retrieve, update, and delete Excel data. We also show examples of the ADO.NET equivalent, which is possible with the CData ADO.NET Provider for Excel. To access Excel data from other .NET applications, like LINQPad, use the CData ADO.NET Provider for Excel.

Once you have acquired the necessary connection properties, accessing Excel data in PowerShell can be enabled in three steps.

The ExcelFile, under the Authentication section, must be set to a valid Excel File.


  1. Install the module:

    Install-Module ExcelCmdlets
  2. Connect:

    $excel = Connect-Excel -Excel File "$Excel File"
  3. Search for and retrieve data:

    $name = "Bob" $sheet = Select-Excel -Connection $excel -Table "Sheet" -Where "Name = `'$Name`'" $sheet

    You can also use the Invoke-Excel cmdlet to execute SQL commands:

    $sheet = Invoke-Excel -Connection $excel -Query 'SELECT * FROM Sheet WHERE Name = @Name' -Params @{'@Name'='Bob'}


  1. Load the provider's assembly:

    [Reflection.Assembly]::LoadFile("C:\Program Files\CData\CData ADO.NET Provider for Excel\lib\System.Data.CData.Excel.dll")
  2. Connect to Excel:

    $conn= New-Object System.Data.CData.Excel.ExcelConnection("Excel File='C:/MyExcelWorkbooks/SampleWorkbook.xlsx';") $conn.Open()
  3. Instantiate the ExcelDataAdapter, execute an SQL query, and output the results:

    $sql="SELECT Name, Revenue from Sheet" $da= New-Object System.Data.CData.Excel.ExcelDataAdapter($sql, $conn) $dt= New-Object System.Data.DataTable $da.Fill($dt) $dt.Rows | foreach { Write-Host $ $_.revenue }

Update Excel Data


Update-Excel -Connection $Excel -Columns @('Name','Revenue') -Values @('MyName', 'MyRevenue') -Table Sheet -Id "MyId"


$cmd = New-Object System.Data.CData.Excel.ExcelCommand("UPDATE Sheet SET Name='Bob' WHERE Id = @myId", $conn) $cmd.Parameters.Add((New-Object System.Data.CData.Excel.ExcelParameter("@myId","10456255-0015501366"))) $cmd.ExecuteNonQuery()

Insert Excel Data


Add-Excel -Connection $Excel -Table Sheet -Columns @("Name", "Revenue") -Values @("MyName", "MyRevenue")


$cmd = New-Object System.Data.CData.Excel.ExcelCommand("INSERT INTO Sheet (Name) VALUES (@myName)", $conn) $cmd.Parameters.Add((New-Object System.Data.CData.Excel.ExcelParameter("@myName","Bob"))) $cmd.ExecuteNonQuery()

Delete Excel Data


Remove-Excel -Connection $Excel -Table "Sheet" -Id "MyId"


$cmd = New-Object System.Data.CData.Excel.ExcelCommand("DELETE FROM Sheet WHERE Id=@myId", $conn) $cmd.Parameters.Add((New-Object System.Data.CData.Excel.ExcelParameter("@myId","001d000000YBRseAAH"))) $cmd.ExecuteNonQuery()