Excel: Guardar como CSV a través de VBA y resulta manualmente en un archivo diferente

StackOverflow https://stackoverflow.com//questions/23058398

  •  26-12-2019
  •  | 
  •  

Pregunta

Necesito guardar varios archivos XLSM como CSV para importarlos en otros programas (como R, etc.). Bueno, he escrito las rutinas de importación necesarias en todos los demás programas y trabajan muy bien con el caso 1:

Case 1: Guardar manualmente un XLSM como CSV Si uso esta opción y guardo manualmente cada archivo como CSV y haga clic en Sí en todas las solicitudes, obtengo un archivo .csv que se ve muy similar a un archivo de Excel normal cuando se abre nuevamente dentro de Excel. Es una vista de columna estándar, y la coma no se separó nada, etc. (Tal vez sea, pero no se ve de esa manera.)

Case 2: Guardar un XLSM de VBA como CSV Bueno, aquí recibo un archivo completamente diferente cuando se abre nuevamente en Excel. Este parece un archivo CSV "real" con todos los valores que se separan comas.

Mis preguntas son: 1. ¿Por qué hay alguna diferencia? 2. ¿Cómo puedo alcanzar programáticamente el Caso 2 de VBA? ¿O es eso imposible?

Si 2 es imposible, tengo que reescribir mis rutinas de código de importación para manejar el archivo CSV "Normal" ... no es muy difícil, pero aún así, y me estoy preguntando por qué incluso es una diferencia ... < / p>

¿Fue útil?

Solución

Q1: No creo que haya una diferencia, al menos no en un ejemplo que me junté. Q2: Pruebe esto:

Tengo 3 archivos XLSM de ejemplo en C:\stack\folder1 como se muestra a continuación:

start2

Cada archivo tiene una única hoja de datos, que se convertiremos en CSV:

inicio

Estoy seguro de que su rutina es mucho más complicada, pero para probar la salida CSV, solo voy a hacerlo a través de los archivos y guardar cada uno como xlCSV:

Option Explicit
Sub TestCSVOutput()

Dim DataBook As Workbook
Dim DataSheet As Worksheet
Dim FilePaths(3) As String
Dim FileIdx As Long

'set up file paths for test
FilePaths(1) = "C:\stack\folder1\test_file_01.xlsm"
FilePaths(2) = "C:\stack\folder1\test_file_02.xlsm"
FilePaths(3) = "C:\stack\folder1\test_file_03.xlsm"

'loop through array and save each file as a CSV
Application.DisplayAlerts = False
For FileIdx = 1 To UBound(FilePaths)

    Set DataBook = Workbooks.Open(FilePaths(FileIdx))
    Set DataSheet = DataBook.ActiveSheet
    DataBook.SaveAs FileFormat:=xlCSV '<~~ the save step
    DataBook.Close

Next FileIdx
Application.DisplayAlerts = True

End Sub

Una vez que se completa el script, termino con tres archivos CSV:

end2

Cada archivo está delimitado por comas cuando se abre en un editor de texto:

ingrese la descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top