如何使用没有安装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立的:
- 脚本专家
- PowerShell代码库