excel 使用powershell将多个xls转换为csv

flvlnr44  于 2023-03-31  发布在  Shell
关注(0)|答案(4)|浏览(171)

我试图转换多个excel文件(xls)到csv,它位于一个文件夹中使用powershell。
我可以转换一个文件,但需要帮助转换多个文件在一个文件夹。但需要建议如何转换多个文件。

$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()
yrdbyhpb

yrdbyhpb1#

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

$ExcelWB = new-object -comobject excel.application

foreach($file in (Get-ChildItem "C:\temp" -filter "*.xls")) {
  $newname = $file.FullName -replace '\.xls$', '.csv'
  $Workbook = $ExcelWB.Workbooks.Open($file.FullName) 
  $Workbook.SaveAs($newname,6)
  $Workbook.Close($false)
}

$ExcelWB.quit()
sdnqo3pr

sdnqo3pr2#

这些未经测试的代码需要注意,但它应该能帮助您解决问题

$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来构建一个新的名称。

yacmzcpb

yacmzcpb3#

使用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")}

Import-Excelcmdlet的可用参数:

WorksheetName

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

DataOnly

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

HeaderName

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

NoHeader

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

StartRow

从开始导入数据的那一行,StartRow上面的所有行都被忽略。默认情况下,这是第一行。

EndRow

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

StartColumn

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

EndColumn

默认情况下,导入读取到最后一个填充的列,-EndColumn告诉导入在较早的数字处停止。

密码

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

6tr1vspr

6tr1vspr4#

扩展@arco444的答案,如果您批量执行此操作,则应该在循环外创建excel对象,以实现更高性能的转换

$ExcelWB = new-object -comobject excel.application

foreach($file in (Get-ChildItem "C:\temp")) {
  $newname = $file.FullName -replace '\.xls$', '.csv'
  $Workbook = $ExcelWB.Workbooks.Open($file.FullName) 
  $Workbook.SaveAs($newname,6)
  $Workbook.Close($false)
}

$ExcelWB.quit()

抱歉,我不能评论和编辑队列已满了一段时间,所以张贴作为一个答案。

相关问题