有没有一种方法可以在不使用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

它是基于以下信息收集而来的:
  • Scripting Guy
  • PowerShell Code Repository
  • 07-24 09:52
    查看更多