有没有办法将.xls转换为.csv而不使用Powershell安装Excel?
我无法在特定计算机上访问Excel,因此在尝试时出现错误:
New-Object -ComObject excel.application
New-Object:使用CLSID检索组件的COM类工厂 {00000000-0000-0000-0000-000000000000}由于以下原因而失败 错误:80040154未注册类(HRESULT异常: 0x80040154(REGDB_E_CLASSNOTREG))。
答案 0 :(得分:1)
转发强>
根据您在系统上已安装的内容,您可能需要Microsoft Access Database Engine 2010 Redistributable才能使此解决方案正常运行。这将使您可以访问提供程序:“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
创建与excel文件$strFileName
的ODBC连接。您需要知道自己的工作表名称并填充$strSheetName
,这有助于构建$strQuery
。然后使用多个对象创建连接并从工作表中提取数据System.Data.DataTable
。在我的测试文件中,有一个填充的工作表,我有两列数据。运行代码后,$dt
的输出为:
letter number
------ ------
a 2
d 34
b 0
e 4
然后您可以使用该表格,然后ExportTo-CSV
$dt | Export-Csv c:\temp\data.csv -NoTypeInformation
这是根据以下信息构建的: