gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:15:20 29 4
gpt4 key购买 nike

我正在尝试使用以下 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com