Hola Paco,
Efectivamente, hay que tener cuidado con los nombres y los números de columnas, ya que el proveedor de datos únicamente nos devuelve el rango útil de la hoja, así que por ejemplo la columna C real de la hoja se deberá llamar B al pedir los datos para el caso de que la columna A no contenga datos. Pero creo que ese punto lo estoy controlando bien, ya que sí recibo el resto de datos en su orden correspondiente.
Te adjunto el proceso tal y como lo tengo ahora mismo para las pruebas que estoy haciendo:
Cargar lista ( DATOSLIBROS@ConversorExcel_Dat, ID, , , , )
Recorrer lista eliminando fichas
Libre
Set ( NOMBRE_TABLA, “Facturación” )
Set ( INICIO_RANGO, “B” )
Set ( FIN_RANGO, “T” )
Set ( RUTA_LIBRO, “C:/Users/root/Desktop/DatosReales.xlsx” )
Rem ( DriverId para versiones de excel 95/97 = 790, para versiones de excel 2007 = 278, para versiones de excel 2013 = 1046 )
Rem ( FI=Excel 5,0 para excel 95, =Excel 8.0 para excel 2000/XP/2003/2007, =Excel 12.0 para excel 2007/2013 )
Rem ( HDR Yes/No para decir si la primera fila son encabezados o no )
// BD: Crear manejador ( hExcel, ODBC (compatible Microsoft SQL Server), “Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, .xlsb)}; DBQ="+RUTA_LIBRO, , , )
BD: Crear manejador ( hExcel, ODBC (compatible Microsoft SQL Server), "Driver={Microsoft Excel Driver (.xls, *.xlsx, *.xlsm, *.xlsb)};DriverId=1046;FIL=Excel 8.0;HDR=No;Dbq=”+RUTA_LIBRO, , , )
BD: Conectar ( hExcel, , , OK_CONEXION, OK_MENSAJE )
BD: SQL ( hExcel, “SELECT * FROM [”+NOMBRE_TABLA+"$"+INICIO_RANGO+":"+FIN_RANGO+"]", ODBC_NUM_FILAS, )
BD: Recorrer lista ( hExcel )
BD: Get dato de columna por nombre ( hExcel, “F2”, FECHA1 )
BD: Get dato de columna por nombre ( hExcel, “F2”, FECHA2 )
BD: Get dato de columna por nombre ( hExcel, “F2”, FECHA )
BD: Get dato de columna por nombre ( hExcel, “F2”, FECHA3 )
BD: Get dato de columna por nombre ( hExcel, “F5”, NOMBRE )
BD: Get dato de columna por nombre ( hExcel, “F11”, DESCRIPCION )
BD: Get dato de columna por nombre ( hExcel, “F12”, CUENTA )
BD: Get dato de columna por nombre ( hExcel, “F19”, SALDO )
Crear nueva ficha en memoria ( NuevaFicha, DATOSLIBROS@ConversorExcel_Dat )
Modificar campo ( FECHA, “Fecha1: “+FECHA1+”, Fecha2: “+FECHA2+”, Fecha3:”+FECHA3+", Fecha: “+FECHA+” - “+“Fecha1f: “+stringToDate(FECHA1, “dd/mm/yyyy”)+”, Fecha2f:”+stringToDate(FECHA2, “dd/mm/yyyy”)+”, Fecha3f: “+stringToDate(FECHA3, “dd/mm/yyyy”)+”,Fechaf: “+stringToDate(FECHA, “dd/mm/yyyy”)+” - “+“Fecha1fd: “+stringToDateTime(FECHA1, “dd/mm/yyyy”)+”, Fecha2fd: “+stringToDateTime(FECHA2, “dd/mm/yyyy”)+”, Fecha3fd:”+stringToDateTime(FECHA3, “dd/mm/yyyy”)+”, Fechafd: “+stringToDateTime(FECHA, “dd/mm/yyyy”) )
Modificar campo ( NOMBRE, NOMBRE )
Modificar campo ( DESCRIPCION, DESCRIPCION )
Modificar campo ( CUENTA, CUENTA )
Modificar campo ( SALDO, SALDO )
// Mensaje ( “Fecha1: “+FECHA1+”\nFecha2: “+FECHA2+”\nFecha3: “+FECHA3+”\n\n”+“Fecha: “+FECHA+”\nFecha Conv: “+stringToDate(FECHA,“dd/mm/yyyy”)+”\nFecha Form:”+day(FECHA)+”/"+month(FECHA)+"/"+year(FECHA)+"\nNombre: “+NOMBRE+”\nDescripción:"+DESCRIPCION+"\nCuenta: “+CUENTA+”\nSaldo: "+SALDO, Información, 2, )
Alta de ficha ( NuevaFicha )
Libre
Emitir sonido
Mensaje ( “Importación Finalizada”, Información, 1, )
Esta no es la importación real, simplemente es para las pruebas, lógicamente luego el campo FECHA no contendrá toda la parafernalia. Para probar, FECHA es Alfabético, FECHA1 es numérico, FECHA2 dos es Fecha y FECHA3 es Tiempo.
El tipo del campo actual donde recojo la acumulación de los datos FECHA es Alfanumérico 256, aunque en mensaje tampoco recibe nada.
Adjunto el archivo Excel, y te explico un poco: como los datos pueden legar de varios orígenes, y cada uno exportado desde un programa de contabilidad diferente, puede venir con formatos, saltos de línea, espacios en blanco, etc…(lo puedes ver en el excel adjunto) y se debe hacer un proceso desasistido. Todo esto lo digo porque no es viable tomar los Excel y ajustar los datos para que le lleguen limpios a Velneo, sino que, de cada “origen/cliente/programa de contabilidad” se toma una muestra del formato de exportación, se define que hojas, columnas y datos van a servir y luego es usa la misma lógica con todos los archivos que procedan del mismo “origen/cliente/programa de contabilidad”. Tampoco se le puede decir al origen que cambie su programa y su forma de exportar para que se adapte a nosotros.
Es por eso que se debe importar la fecha con ese formato, si no, tomaría cada uno, convertiría las fechas a número y listo. (tampoco se podrá automatizar esto último sin visualizar los datos y decidir que es fecha y que es número, porque en la misma columna de fechas también pueden llegar datos de texto y número)
DatosReales.xlsx (16 KB)