Tengo un VBScript que convierte cualquier archivo XML en una carpeta a XLS y, a continuación, elimina los archivos XML – todo funciona bien.

Sin embargo, sé que necesita para convertir los XMLs a CSV en lugar de XLS.

¿Qué necesito cambiar en el script para permitir esto? Simplemente cambiando la extensión del archivo resultante(s), obviamente, no funciona.

Dim xlApp, xlWkb, SourceFolder,TargetFolder,file
Set xlApp = CreateObject("excel.application")
Set fs = CreateObject("Scripting.FileSystemObject")

Const xlNormal=1

SourceFolder="c:\xml-to-xls\xml"
TargetFolder="c:\xml-to-xls\xls"

xlApp.Visible = false

for each file in fs.GetFolder(SourceFolder).files
  Set xlWkb = xlApp.Workbooks.Open(file)
  BaseName= fs.getbasename(file)
  FullTargetPath=TargetFolder & "\" & BaseName & ".xls"
  xlWkb.SaveAs FullTargetPath, xlNormal
  xlWkb.close
next

fs.DeleteFile("C:\xml-to-xls\xml\*.xml")

Set xlWkb = Nothing
Set xlApp = Nothing
Set fs = Nothing

Gracias

  • He eliminado todos los comentarios del código. Es absolutamente innecesario comentario como este: xlWkb.close ' close workbook – el código ya se dice que. Básicamente se está escribiendo su programa dos veces – eso es una tontería. No hagas eso.
InformationsquelleAutor chenks | 2013-10-29

2 Comentarios

  1. 2

    Actualización como por los comentarios: Gracias chicos

    Const xlCSV = 6
    xlWkb.SaveAs FullTargetPath, xlCSV, , , , , , 2
    xlWbk.Saved = True
    xlWkb.close
    • xlCSV no está disponible como un nombre en VBScript, tendría que hacer un Const xlCSV = 6 de antemano.
    • puesto que justo antes de la SaveAs línea ?
    • La pondría después de la otra Const definición.
    • le dará una oportunidad y ver cuáles son los resultados
    • ya que parece que no funciona como debería. se pide a cada archivo si desea guardar los cambios a un archivo CSV, el cual requiere que yo haga clic en SÍ antes de que finalice. También, si hago clic en SÍ, el archivo resultante no es la misma como si tuviera guardar manualmente el archivo XLS (utilizando origen de vbscript) como un archivo CSV.
    • Puede que necesite especificar la ConflictResolution argumento (xlWkb.SaveAs FullTargetPath, xlCSV, , , , , , 2. Y ¿cómo es exactamente lo que los resultados difieren? CSV es un formato diferente que no admite todas las características XLS(X) proporciona.
    • quiero decir que simplemente dando el archivo CSV extensión no hacer automáticamente un archivo CSV, que es lo que el guión era esencialmente haciendo.
    • OK, han utilizado la ConflictResolution argumento como se ha mencionado y esta ahora guarda los XMLs a los CSVs. 1 cuestiones, aunque, me sale un aviso de guardar para cada archivo preguntando si quiero guardar los cambios. necesito esto para ser un silencioso proceso que no requiere manual de interacción con el usuario.
    • Agregar una línea de xlWbk.Saved = True antes de cerrar el libro.
    • Wiechers excelente, que funciona de maravilla
    • una última pregunta, ¿qué tengo que agregar para que si no hay archivos que se encuentran actualmente en el XML de la carpeta, a continuación, el script termina con error. en el momento en que si no hay archivos para convertir, a continuación, se produce un «archivo no encontrado» mensaje de error
    • Eso es probablemente causada por la línea de fs.DeleteFile("C:\xml-to-xls\xml\*.xml"). Para evitar esto, mueva la eliminación dentro del bucle y eliminar cada archivo después de que se haya procesado (file.Delete).
    • sí que ha hecho el truco

  2. 2

    gracias chicos… aquí está el guión terminado

    Dim xlApp, xlWkb, SourceFolder,TargetFolder,file
    Set xlApp = CreateObject("excel.application")
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    Const xlNormal=1
    Const xlCSV=6
    
    SourceFolder="c:\xml-to-xls\xml"
    TargetFolder="c:\xml-to-xls\xls"
    
    xlApp.Visible = false
    
    for each file in fs.GetFolder(SourceFolder).files
      Set xlWkb = xlApp.Workbooks.Open(file)
      BaseName= fs.getbasename(file)
      FullTargetPath=TargetFolder & "\" & BaseName & ".csv"
      xlWkb.SaveAs FullTargetPath, xlCSV, , , , , , 2
      xlWkb.Saved = True
      xlWkb.close
      file.Delete
    next
    
    Set xlWkb = Nothing
    Set xlApp = Nothing
    Set fs = Nothing

Dejar respuesta

Please enter your comment!
Please enter your name here