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

时间:2015-01-16 03:27:17

标签: excel powershell

有没有办法将.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))。

1 个答案:

答案 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

这是根据以下信息构建的:

  1. Scripting Guy
  2. PowerShell Code Repository