我尝试将多个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()
答案 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可用的参数:
指定要导入的Excel工作簿中工作表的名称。默认情况下,如果未提供名称,则将导入第一个工作表。
仅导入包含数据的行和列,不导入空行和空列。
指定要使用的自定义属性名称,而不是TopRow列标题中定义的值。
自动生成属性名称(P1,P2,P3,..),而不是在TopRow列标题中定义的属性名称。
从我们开始导入数据的行开始,忽略StartRow上方的所有行。默认情况下,这是第一行。
默认情况下,将导入工作表中最后一个单元格的所有行。如果指定,导入将在此行停止。
要从中读取数据的第一列的编号(默认为1)。
默认情况下,导入会读取到最后一个填充的列,-EndColumn告诉导入以较早的编号停止。
接受一个字符串,该字符串将用于打开受密码保护的Excel文件。