Estoy tratando de convertir varios archivos de Excel (XLS) a CSV utilizando la siguiente secuencia de comandos de PowerShell:¿Cómo convertir múltiples archivos xls a csv usando 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)
En principio esto funciona, por ejemplo, Obtengo archivos csv. Sin embargo, para algunos archivos (que varía por corrida) consigo una excepción:
Exception calling "SaveAs" with "2" argument(s): "Microsoft Office Excel cannot access the file 'C:\Users\...\AppData\Local\Temp'. ...
Además, aparece un cuadro de mensaje preguntando si desea guardar los cambios a la fuente xls.
Una vez que llamo a SaveAs, $ wb hace referencia al nuevo archivo. Entonces, ¿cómo puedo guardar o descartar los cambios en el archivo de origen? ¿Por qué sucede esto solo para algunos archivos? ¿Hay algún otro problema con este script?
actualización
dividí los archivos de entrada (ca. 200) de forma arbitraria (es decir, no sé el tamaño de los grupos) en 10 grupos y se procesa cada grupo en su propia carrera. Eso funcionó, así que es un poco inconveniente.
gracias de antemano
¿Tiene una mirada al archivo tempory se muestra en el error, sólo para ver si hay no hay archivo restante. Me encontré con un problema similar en una secuencia de comandos de conversión de PDF y el archivo temprary antiguo que quedaba estaba en el origen del problema. – JPBlanc
Desafortunadamente, el mensaje de error solo nombra el directorio Temp. Supervisé el directorio durante una ejecución y aparecieron y desaparecieron dos archivos (supuestamente para cada xls convertido) con nombres aleatorios. – wierob