Reputation: 862
I need to read an Excel file from Powershell.
I am using this object:
$objExcel=New-Object -ComObject Excel.Application
It is working fine on a machine with an Office installation but if Office is not installed, I get this error:
Retrieving the COM class factory for component with CLSID {} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Is there some runtime environment for Office to use?
Upvotes: 5
Views: 10805
Reputation: 237
Warning: Excel Viewer is retired.
No runtime, like Access.
There is a viewer, if that's any help.
Overview
With Excel Viewer, you can open, view, and print Excel workbooks, even if you don't have Excel installed. You can also copy data from Excel Viewer to another program. However, you cannot edit data, save a workbook, or create a new workbook.
Upvotes: 1
Reputation: 1648
Instead of COM it is possible to use Active X Data Objects (ADO) e.g.
$strFileName = "C:\Data\scriptingGuys\Servers.xls"
$strSheetName = 'ServerList$'
$strProvider = "Provider=Microsoft.Jet.OLEDB.4.0"
$strDataSource = "Data Source = $strFileName"
$strExtend = "Extended Properties=Excel 8.0"
$strQuery = "Select * from [$strSheetName]"
$objConn = New-Object System.Data.OleDb.OleDbConnection("$strProvider;$strDataSource;$strExtend")
$sqlCommand = New-Object System.Data.OleDb.OleDbCommand($strQuery)
$sqlCommand.Connection = $objConn
$objConn.open()
$DataReader = $sqlCommand.ExecuteReader()
While($DataReader.read())
{
$ComputerName = $DataReader[0].Tostring()
"Querying $computerName ..."
Get-WmiObject -Class Win32_Bios -computername $ComputerName
}
$dataReader.close()
$objConn.close()
Upvotes: 1
Reputation: 59783
There's no "runtime" for Excel that you can use without obtaining a proper license for Excel (and installing Excel on the machine). If you were trying to do this on a Server OS with multiple users, you'd need to consider special licensing there too (as a single Excel license wouldn't cover multiple users more than likely).
You might consider using the OpenXML SDK for Office as a way of performing some common actions within an Excel file like documented here. As it's a .NET library, you would be able to use it from within PowerShell.
Upvotes: 4