excel - 如何使用powershell将多个xls文件转换为csv?

标签 excel powershell csv xls

我正在尝试使用以下 powershell 脚本将多个 Excel 文件 (xls) 转换为 csv:

$excel = new-object -ComObject "Excel.Application"
$excel.DisplayAlerts=$True
$excel.Visible =$false
foreach ($file in get-childitem $src_dir) {
    $wb = $excel.Workbooks.Open($file.FullName)
    $wb.SaveAs($dst_dir + $file.Name + ".csv", 6)# 6 -> csv
    $wb.Close($True)
}
$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

原则上这是有效的,例如我收到 csv 文件。但是,对于一些文件(每次运行都会有所不同),我遇到了异常:

Exception calling "SaveAs" with "2" argument(s): "Microsoft Office Excel cannot access the file 'C:\Users\...\AppData\Local\Temp'. ...

此外,我还收到一个消息框,询问我是否要将更改保存到源 xls。

一旦我调用 SaveAs,$wb 就会引用新文件。那么如何保存或放弃对源文件的更改呢?为什么只有少数文件会发生这种情况?该脚本还有其他问题吗?

更新

我将输入文件(大约 200 个)任意(即不知道组的大小)分为 10 组,并在自己的运行中处理每个组。这有效,所以有点不方便。

提前致谢

最佳答案

尝试将代码移至循环内以启动和退出 Excel。

是的,这样会比较慢,但它会鼓励 Excel 在每次操作之间清理其临时文件。

它不会像你想象的那么慢,因为 Windows 和 COM 足够聪明,即使在你退出几秒钟后,它也能将 Excel 大部分内容保留在内存中,这样下次你创建 Excel 对象时它就会发生得很快,正是针对这样的情况。

关于excel - 如何使用powershell将多个xls文件转换为csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6059940/

相关文章:

excel - 如何使英文日期格式在法文 Excel 中工作?

c# - 使用 excelcnv.exe 将 xls 转换为 xlsm

python - 使用电子表格数据时如何避免嵌套循环?

mysql - 通过 mysql workbench 将 csv 导入表时的整数值不正确

django - 在 django 中上传 csv 时,迭代器应该返回字符串,而不是字节(您是否以文本模式打开文件?)

python - python中CSV数据的数据类型识别/猜测

macos - 适用于 Mac OS X 的 Excel VBA 中是否有 Microsoft 脚本运行时库的替代方案?

powershell - Powershell-如何通过ping响应时间对UNC路径进行排序

powershell - 无法检索群集可用存储的物理大小

powershell - Powershell-具有多个属性的组对象PSObject