有没有一种方法可以在不使用Powershell安装Excel的情况下将.xls转换为.csv?
我无权访问特定计算机上的Excel,因此尝试时出现错误:
New-Object -ComObject excel.application
最佳答案
转发
根据系统上已经安装的内容,可能需要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
它是基于以下信息收集而来的: