【发布时间】:2011-08-28 22:21:42
【问题描述】:
我正在尝试使用以下 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 组,并在自己的运行中处理每个组。这行得通,所以有点不方便。
提前致谢
【问题讨论】:
-
你看看错误中显示的临时文件,看看是否没有剩余文件。我在 PDF 转换脚本中遇到了类似的问题,遗留的旧临时文件是问题的根源。
-
不幸的是,错误消息只命名了 Temp 目录。我在运行期间监视了目录,并且出现并消失了两个具有随机名称的文件(可能是每个转换后的 xls)。
标签: excel powershell csv xls