Я пытаюсь преобразовать несколько файлов Excel (xls) в csv, используя следующий сценарий PowerShell:
$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 групп и обработал каждую группу в отдельном прогоне . Это сработало, так что это несколько неудобно.
заранее спасибо