Visualfoxpro 9.0sp2 + Excel 2016

1,291 views
Skip to first unread message

wesp...@gmail.com

unread,
Sep 15, 2015, 10:52:30 AM9/15/15
to Comunidad de Visual Foxpro en Español
Hola Amigos,

Antes de todo Muchas gracias por su valiosa ayuda,

Hasta la fecha estoy utilizando la rutina de importar un archivo excel a dbf del maestro Luis María,
sin embargo me he topado con una pc de un cliente que tiene instalado el excel 2016 preview y la rutina ya no corre
mandándome el mensaje que en el adjunto remito (ver gráfico).

Les agradesco por laayuda que me puedan brindar para resolverlo

Adjunto la rutina por si estoy comentiendo algún error:

CLOSE TABLES all

Local lcXLBook As String, lnSQLHand As Integer, ;
lcSQLCmd As String, lnSuccess As Integer, ;
lcConnstr As String

lcXLBook = Getfile('xls, xlsx, xlsm, xlsb', 'Archivo:', 'Aceptar', 0, 'Seleccione una hoja de cálculo')
If Empty(lcXLBook)
Return .F.
Endif

If !File(lcXLBook)
Messagebox("Archivo no encontrado", 16)
Return .F.
Endif

Local oExcel As Excel.Application
m.oExcel = Createobject("Excel.application")

If Vartype(oExcel,.T.)!='O'
Messagebox("No se puede procesar el archivo porque no tiene la aplicación" ;
+ Chr(13) + "Microsoft Excel instalada en su computador.", 16)
m.oExcel = Null
Release oExcel
Return .F.
Endif

m.oExcel.Workbooks.Open(m.lcXLBook)
m.oExcel.Sheets(1).Select

Local oSheet As Object, lcSheet As String
m.oSheet = m.oExcel.ActiveSheet
m.lcSheet = m.oSheet.Name

m.oExcel.Quit()
m.oExcel = Null
Release oSheet, oExcel

WAIT WINDOW "Procesando.." nowait

lcConnstr = [Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=] + lcXLBook
lnSQLHand = Sqlstringconnect( lcConnstr )

lcSQLCmd = [Select * FROM "] + m.lcSheet + [$"]
lnSuccess = SQLExec( lnSQLHand, lcSQLCmd, [xlResults] )

If lnSuccess < 0
Local Array laErr[1]
Aerror( laErr ) 
Messagebox(laErr(3), 16)
SQLDisconnect( lnSQLHand )
Return .F.
Endif

Select xlResults
SQLDisconnect(lnSQLHand)
BROWSE


Carlos MauricioTorres Suárez

unread,
Sep 15, 2015, 2:46:42 PM9/15/15
to Comunidad de Visual Foxpro en Español
Grabe el archivo en Formato Excel 5.0/95 y com un IMPORT FROM Archivo_Guardado TYPE XLS el asunto está terminado.

Saludos

Walter Salcedo

unread,
Sep 15, 2015, 6:38:06 PM9/15/15
to publice...@googlegroups.com
Hola Carlos,
Gracias por tu respuesta, necesito importar un xlsx de 525,000 registros y la opción que me das no cumple con lo que necesito.

Atte,
Walter Salcedo

Carlos Miguel FARIAS

unread,
Sep 16, 2015, 7:11:45 AM9/16/15
to Grupo Fox
VFP importa datos de excel de las versiones viejas, que soportaban creo 65000 filas.
El formato interno de los xlsx es muy distinta a xls.
a) Exporta a CSV desde excel, luego importa desde fox.
b) Abri el archivo desde LibreOffice Calc y guardalo como DBF
c) No se si ODBC permite ver los xlsx?
Saludos: Miguel, La Pampa (RA)

Larga Vida y Prosperidad
Que la Fuerza los acompañe

Elides Paredes

unread,
Sep 19, 2015, 10:16:42 AM9/19/15
to Comunidad de Visual Foxpro en Español
Estimado amigo, 

A mi me funcionó así, aunque es un procedimiento 'manual'. tomé ésta idea del link que señalo a continuaciòn
* Importar desde una tabla de excel


Y mi Prg quedó así.:

*!* APPEND FROM FileName | ?[FIELDS FieldList] [FOR lExpression]
*!*   [[TYPE] [DELIMITED [WITH Delimiter | WITH BLANK | WITH TAB
*!*      | WITH CHARACTER Delimiter] | DIF | FW2 | MOD | PDOX | RPD |
*!*      SDF | SYLK | WK1 | WK3 | WKS | WR1 | WRK | CSV | XLS | XL5 
*!*      [SHEET cSheetName] | XL8 [SHEET cSheetName]]] [AS nCodePage]


* Para pasar el archivo de excel a dbf 
* debo crear con el excel un archivo tipo CSV el cual
* Ahora es un archivo de texto con los campos separados por ';'
* luego con el block de notas lo abro y sustituyo el ';' por ','
* Porque de forma predeterminada, se supone que el contenido de los campos debe estar
* separado entre sí mediante comas (no incluya espacios adicionales antes o
* después de las comas) y que los valores de los campos de caracteres
* están delimitados además por dobles comillas. 

* La tabla (dbf), a la cual le agrego los registros debe estar creada previamente la uso y luego le agrego los registros
* a partir del archivo csc

 USE 'C:\Configurargv\Tablas\cuentas2'

APPEND FROM 'c:\Configurargv\Por borrar\Cuentas3.csv'  TYPE CSV 

Espero sea de utilidad para los que tienen la misma necesidad

Elides Paredes
Barquisimeto Venezuela

Walter Salcedo

unread,
Sep 19, 2015, 2:39:27 PM9/19/15
to publice...@googlegroups.com

Estimado Elides,

Mucha gracias por responder,

Acabo de hacer lo que me has indicado y todo bien, pero esto es para apagar el incendio.

Sin embargo sigo buscando la manera de hacerlo de manera automatizada que es la forma en que debería quedar.

 

Muchas gracias a todos por tomarse la molestia de responder.

 

Atte,

 

Walter Salcedo

Víctor Hugo Espínola Domínguez

unread,
Sep 19, 2015, 3:00:29 PM9/19/15
to publice...@googlegroups.com
Hola Walter

Verifica que el nombre del controlador exista:

Panel de Control/Herramientas administrativas/Origenes de datos (ODBC)/Controladores


Saludos,
Víctor.
Lambaré - Paraguay.

Cby

unread,
Oct 10, 2015, 10:39:51 AM10/10/15
to Comunidad de Visual Foxpro en Español
Buenos días.
Sabes que instale el Office 2016 sobre un windows 10.
Y me anda perfecto la importación (tengo una rutina parecida a la tuya)
Lo unico que yo antes usaba el driver del 2007 y ahora me baje de la página de Microsoft la versión 2010 del accessdatabase

Saludos y buen finde

Walter Salcedo

unread,
Oct 10, 2015, 3:40:02 PM10/10/15
to publice...@googlegroups.com

Muchas gracias Cby, lo probaré,..

Atte,

 

Walter Salcedo

 

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Cby
Enviado el: sábado, 10 de octubre de 2015 9:40 a. m.
Para: Comunidad de Visual Foxpro en Español <publice...@googlegroups.com>
Asunto: [vfp] Re: Visualfoxpro 9.0sp2 + Excel 2016

 

Buenos días.

Americo Aguilar

unread,
Jun 2, 2016, 12:39:31 PM6/2/16
to Comunidad de Visual Foxpro en Español

Estimados amigos, tengo un inconveniente desde que instale el excel 2016, ya no puedo utilizar la automatizacion, por ejemplo carge el procedimiento que se muestra y no llego al OPEN, me sale el mensaje siguiente 




Alguien por favor me puede decir porque y donde buscar una solucion 

Gracias


Américo



El martes, 15 de septiembre de 2015, 9:52:30 (UTC-5), wesp...@gmail.com escribió:

Jorge L. Florez C.

unread,
Jun 3, 2016, 11:02:31 AM6/3/16
to publice...@googlegroups.com
Hola,

Prueba esto

copy to <tu_cursor> to hojaexcel.XLS

así no tendras problemas con los 65000 registros soportados por el formato antiguo de excel

Saludos
Jorge Florez
Lima - Perú

P.D. si tienes campos fecha en tu cursor, se sugiere convertirlos a caracter de 10, así excel no cambiará el formato de la fecha

Americo Aguilar

unread,
Jul 25, 2016, 4:26:20 PM7/25/16
to Comunidad de Visual Foxpro en Español
Walter

No se si encontraste la solucion pero yo termine haciendo una rutina que separa de 65000 en 65000 los registros en diferentes archivos de excel, luego uno por uno los copio al primer archivo y lo guardo como XLSX, hasta ahora me funciona.


SELECT (cNombreTabla)
nNumeroRegistros = RECCOUNT() + 3
IF nNumeroRegistros > 3
IF nNumeroRegistros < 65000
COPY TO (cNombreExcel) XL5
cExtension = 'XLS'
ELSE
nInicio = 1
nFinal  = 65000
FOR oHojas = 1 TO INT(nNumeroRegistros / 65000) + IIF(ABS(MOD(nNumeroRegistros, 65000)) > 0, 1, 0)
COPY TO (cNombreExcel + '_' + ALLTRIM(STR(oHojas))) XL5 FOR RECNO() >= nInicio AND RECNO() <= nFinal
nInicio = nFinal + 1
nFinal  = nFinal * 2
ENDFOR
loExcel  = CREATEOBJECT("Excel.Application")
loExcel.Workbooks.OPEN(cNombreExcel + '_1.XLS')
IF FILE(cNombreExcel + '.XLSX')
ERASE (cNombreExcel + '.XLSX')
ENDIF
loExcel.ActiveWorkbook.SAVEAS(cNombreExcel + '.XLSX', 51)
loExcel.DisplayAlerts = .F.
loExcel.ActiveWorkbook.CLOSE
loExcel.DisplayAlerts = .T.
* Workbooks.close(cNombreExcel + '.XLSX')
FOR iHojas = oHojas - 1 TO 2 STEP -1
loExcel.Workbooks.OPEN(cNombreExcel + '_' + ALLTRIM(STR(iHojas)) + '.XLS')
lastCol = loExcel.RANGE("A2").END(xlToRight).COLUMN
lastRow = loExcel.Cells(65536, lastCol).END(xlUp).ROW
loExcel.RANGE("A2", loExcel.Cells(lastRow, lastCol)).COPY

loExcel.Workbooks.OPEN(cNombreExcel + '.XLSX')
lastRow0 = loExcel.Cells(65536, lastCol).END(xlUp).ROW
loExcel.RANGE("A" + ALLTRIM(STR(lastRow0+1)), loExcel.Cells(lastRow0+1+lastRow, lastCol)).SELECT
loExcel.ActiveSheet.paste
loExcel.RANGE("A1").SELECT
loExcel.ActiveWorkbook.SAVE &&(cNombreExcel + '.XLSX') &&, 51)
loExcel.DisplayAlerts = .F.
loExcel.ActiveWorkbook.CLOSE
loExcel.DisplayAlerts = .T.
ENDFOR
loExcel.DisplayAlerts = .F.
loExcel.QUIT
loExcel.DisplayAlerts = .T.
cExtension = 'XLSX'
ENDIF
lprocesa = .T.
ENDIF


Mi problema es que no puedo automatizar en las pc's que tienene instalado el excel 2016, hasta la linea 
loExcel  = CREATEOBJECT("Excel.Application")
la siguiente 
loExcel.Workbooks.OPEN(cNombreExcel + '_1.XLS')
Me da el mensaje que no es un opbjeto

Claro que seria facil dejarlo con office 2010, pero ya la gerencia ha decidido el cambio, y aun no encuentro la solucion, si sabes de algo por favor pasame la voz.

Saludos

Americo

Leonardo A.

unread,
Sep 28, 2016, 1:26:16 PM9/28/16
to Comunidad de Visual Foxpro en Español
Se que este tema esta un poco rezagado, pero curiosamente me encontré con este problema y este tema, utilicen esta configuración y verán que funciona sin ningún problema no hay necesidad de agregar controlador.

lcConnstr = "DRIVER={Microsoft Excel Driver (*.xls)};UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;ReadOnly=0;PageTimeout=5;MaxScanRows=8;MaxBufferSize=2048;FIL=excel 8.0;DriverId=790;DBQ="+lcXLBook

Jose Mario

unread,
Sep 28, 2016, 3:04:13 PM9/28/16
to Comunidad de Visual Foxpro en Español
revivistes un muerto

lcConnstr = "DRIVER={Microsoft Excel Driver (*.xls)};UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;ReadOnly=0;PageTimeout=5;MaxScanRows=8;MaxBufferSize=2048;FIL=excel 8.0;DriverId=790;DBQ="+lcXLBook

que hace esto
Reply all
Reply to author
Forward
0 new messages