没有Office套件的ComObject Excel.Application

时间:2014-04-30 13:34:09

标签: excel powershell ms-office powershell-v2.0


我需要从Powershell读取一个Excel文件 我正在使用这个对象:

$objExcel=New-Object -ComObject Excel.Application

在具有Office安装的计算机上运行正常但如果未安装Office,则会出现此错误:

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)).

是否有一些运行时环境供Office使用?

3 个答案:

答案 0 :(得分:4)

没有&#34;运行时&#34;对于Excel,您可以使用而无需获得适当的Excel许可证(并在计算机上安装Excel)。 如果您尝试在具有多个用户的服务器操作系统上执行此操作,则您还需要考虑特殊许可(因为单个Excel许可证不会覆盖多个用户)。< / em>的

您可以考虑使用OpenXML SDK for Office作为在Excel文件中执行某些常见操作的方法,例如记录的here。由于它是一个.NET库,您可以在PowerShell中使用它。

答案 1 :(得分:1)

没有运行时,比如Access。

有观众,如果有任何帮助。

  

概述

     

使用Excel Viewer,即使您没有安装Excel,也可以打开,查看和打印Excel工作簿。你也可以复制   Excel Viewer中的数据到另一个程序。但是,您无法编辑   数据,保存工作簿或创建新工作簿。

答案 2 :(得分:1)

可以使用Active X数据对象(ADO)代替COM,例如

$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()

来源:http://blogs.technet.com/b/heyscriptingguy/archive/2008/09/11/how-can-i-read-from-excel-without-using-excel.aspx