** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Ficheros CSV
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoFicheros CSV

 Responder Responder
Autor
Mensaje
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1258
Enlace directo a este mensaje Tema: Ficheros CSV
    Enviado: 05/Octubre/2021 a las 19:44
Windows_10 vs Access_2010
Buebas tardes
Mi consulta trata de como importar por código un fichero csv a una tabla
Trato de importar los campos que vienen entre comillas y que estan separados por comas
El problema se me presenta en aquellos campos numéricos que tambien tienen la coma
  FECHA           Importe      Titular
"02/04/2021","112,14","HBO Nordic AB"
Primero Limpio las comillas y me quedaria algo asi
  02/04/2021,112,14,HBO Nordic AB
El problema es cuando trato de usar split con la "," como delimitador me separaria el número decimal en dos campos.
De momento solo pude hacerlo por medio de una importacion guardada

Saludos
Arriba
SkaryBlondi Ver desplegable
Habitual
Habitual


Unido: 24/Octubre/2020
Localización: Asturias
Estado: Sin conexión
Puntos: 89
Enlace directo a este mensaje Enviado: 05/Octubre/2021 a las 20:31
Buenas noches desde la Villa

Si abres excel y abres la grabadoras de macros y luego importas el fichero delimitado te va a dar un código válido que con pequeñas modificaciones lo podrás implantar luego en access.

Generé un CSV con los siguientes datos de casos Covid

Fecha Casos
30/09/2021 0
29/09/2021 0
28/09/2021 1
27/09/2021 0
26/09/2021 3
25/09/2021 0
24/09/2021 0
23/09/2021 0
22/09/2021 0
21/09/2021 0
20/09/2021 0
19/09/2021 0
18/09/2021 0

Lo importé en Excel y la grabadora de macros me generó el siguiente código.

Sub Macro1()
'
' Macro1 Macro
'

'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\usuario\Downloads\Casos Covid.csv", Destination:=Range("$A$1") _
        )
        .Name = "Casos Covid"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(4, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub



Editado por SkaryBlondi - 05/Octubre/2021 a las 20:32
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1258
Enlace directo a este mensaje Enviado: 05/Octubre/2021 a las 21:02
Hola SkaryBlond
Ya lo tengo hecho en una importación guardada en acces
que la ejecuto con la instruccion
DoCmd.RunSavedImportExport ("Nuevos_PagosPal_Importable") y ya me guarda los datos en la tabla y funciiona correctamente.
El truco en las especificaciones de la importación está en poner el "." y no la "," como separador decimal
Luego la traspaso a Excel con...
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9
Y envio la excel a un tercero, que es lo que necesito.
Trato de hacerlo por codigo al igual que con otros ficheros ".txt" para no tener que ir creando y guardando las importaciones.
Saludos y gracias por tu tiempo





Editado por main - 06/Octubre/2021 a las 13:12
Arriba
emiliove Ver desplegable
Administrador
Administrador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5694
Enlace directo a este mensaje Enviado: 05/Octubre/2021 a las 23:24
Hola Main

Primero Reemplazas las comillas con algo "," por "-"
"02/04/2021"-"112,14"-"HBO Nordic AB"
Y después reemplazas la coma por el punto
"02/04/2021"-"112.14"-"HBO Nordic AB"
Y por último los guiones y comillas por comas
"02/04/2021,112.14,HBO Nordic AB"

Has intentado usar la función STR como dice Emilio Sancha Concatenación de cadenas y construcción de sentencias SQL (mvp-access.es)

Saludos.
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1258
Enlace directo a este mensaje Enviado: 06/Octubre/2021 a las 00:38
Hola emilove
Al final me decidi por algo parecido
Private Sub Comando2_Click()
Dim S As String, Newtxt As String
Open "C:\MiDespacho\PLANTILLAS\Pal_Importable.CSV" For Input As #1
S = Input(LOF(1), #1)
Newtxt = Replace(S, Chr(34) & ",", "|")
Close #1
Debug.Print Replace(Newtxt, Chr(34), "")
End Sub
y me queda cada registro asi
02/04/2021|11:21:42|CEST|HBO Nordic
Y ahora ya puedo utilizar split sin problemas
Se puede hacer de una pasada uniendo los Replace
Newtxt = Replace(Replace(S, Chr(34) & ",", "|"), Chr(34), "")

Gracias por interesarte

Se puede cerrar el tema



Editado por main - 06/Octubre/2021 a las 00:57
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable