如何使用没有安装Excel的Powershell将.xls转换为.csv

有没有办法将.xls转换为.csv没有安装使用PowerShell的Excel?

我没有在特定的机器上访问Excel,所以当我尝试时出现错误:

New-Object -ComObject excel.application 

New-Object:检索具有CLSID {00000000-0000-0000-0000-000000000000}的组件的COM类工厂失败,原因如下:80040154类未注册(exception来自HRESULT:0x80040154(REGDB_E_CLASSNOTREG))。

前锋

根据您的系统上已经安装的内容,您可能需要使用Microsoft Access数据库引擎2010可再发行组件来运行此解决scheme。 这将使您可以访问提供者:“Microsoft.ACE.OLEDB.12.0”

免责声明 :结果不令人印象深刻,有更多背景的人可以使这个答案更好,但在这里。

 $strFileName = "C:\temp\Book1.xls" $strSheetName = 'Sheet1$' $strProvider = "Provider=Microsoft.ACE.OLEDB.12.0" $strDataSource = "Data Source = $strFileName" $strExtend = "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';" $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() $da = New-Object system.Data.OleDb.OleDbDataAdapter($sqlCommand) $dt = New-Object system.Data.datatable [void]$da.fill($dt) $dataReader.close() $objConn.close() $dt 

创build到excel文件$strFileName的ODBC连接。 您需要知道您的工作表名称并填充$strSheetName ,这有助于构build$strQuery 。 然后使用多个对象创build一个连接,并从表中提取数据作为System.Data.DataTable 。 在我的testing文件中,有一个填充表,我有两列数据。 运行代码之后, $dt的输出是:

 letter number ------ ------ a 2 d 34 b 0 e 4 

然后你可以拿走ExportTo-CSV表,然后ExportTo-CSV

 $dt | Export-Csv c:\temp\data.csv -NoTypeInformation 

这是基于从以下收集的信息build立的:

  1. 脚本专家
  2. PowerShell代码库