使用powershell将多个xls转换为csv

时间:2014-12-04 11:55:53

标签: excel powershell csv

我尝试将多个Excel文件(xls)转换为使用PowerShell位于文件夹中的csv。

我可以转换单个文件,但需要帮助转换文件夹中的多个文件。 但需要建议如何转换多个文件。

$ExcelWB = new-object -comobject excel.application
$Workbook = $ExcelWB.Workbooks.Open(c:\temp\temp.xls) 
$Workbook.SaveAs("c:\temp\temp.csv",6)
$Workbook.Close($false)
$ExcelWB.quit()

3 个答案:

答案 0 :(得分:14)

您可以将其包装在循环中,迭代所有文件并将xls扩展名更改为csv

foreach($file in (Get-ChildItem "C:\temp")) {

  $newname = $file.FullName -replace '\.xls$', '.csv'
  $ExcelWB = new-object -comobject excel.application
  $Workbook = $ExcelWB.Workbooks.Open($file.FullName) 
  $Workbook.SaveAs($newname,6)
  $Workbook.Close($false)
  $ExcelWB.quit()

}

答案 1 :(得分:7)

这个未经测试的代码有一些警告,但它应该有助于解决您的问题

$ExcelWB = new-object -comobject excel.application

Get-ChildItem -Path c:\folder -Filter "*.xls" | ForEach-Object{
    $Workbook = $ExcelWB.Workbooks.Open($_.Fullname) 
    $newName = ($_.Fullname).Replace($_.Extension,".csv")
    $Workbook.SaveAs($newName,6)
    $Workbook.Close($false)
}
$ExcelWB.quit()

取第一个和最后一个之间的线并构建一个循环。使用Get-ChildItem抓取您的xls文件,然后通过替换文件的FullName

的扩展名来构建新名称

答案 2 :(得分:0)

使用Doug Finke开发的ImportExcel模块,可以更快地完成从xlsx文件到csv的转换,而无需安装COM对象-因此无需安装Excel。

Install-Module -Name ImportExcel -RequiredVersion 5.4.2 
gci *.xlsx | %{Import-Excel $_ | Export-Csv ($_.basename + ".csv")}

反之亦然:

gci *.csv | %{Import-Csv $_ | Export-Excel ($_.basename + ".xlsx")}

导入Excel cmdlet可用的参数:

WorksheetName

指定要导入的Excel工作簿中工作表的名称。默认情况下,如果未提供名称,则将导入第一个工作表。

仅数据

仅导入包含数据的行和列,不导入空行和空列。

HeaderName

指定要使用的自定义属性名称,而不是TopRow列标题中定义的值。

NoHeader

自动生成属性名称(P1,P2,P3,..),而不是在TopRow列标题中定义的属性名称。

StartRow

从我们开始导入数据的行开始,忽略StartRow上方的所有行。默认情况下,这是第一行。

EndRow

默认情况下,将导入工作表中最后一个单元格的所有行。如果指定,导入将在此行停止。

StartColumn

要从中读取数据的第一列的编号(默认为1)。

EndColumn

默认情况下,导入会读取到最后一个填充的列,-EndColumn告诉导入以较早的编号停止。

密码

接受一个字符串,该字符串将用于打开受密码保护的Excel文件。