Documentos de Académico
Documentos de Profesional
Documentos de Cultura
***********************************************************************************
*******************************************
*!* Convierte un archivo "XLS" / "XLSX" / "CSV" / "SLK" en un cursor.
***********************************************************************************
*******************************************
*!* Parametros:
*!* lcXls: Ruta completa y nombre de archivo excel (Obl.).
Si se omite la ruta, se tomará la carpeta actual.
*!* lcCur: Nombre del cursor a generar (Opc.). Si se
omite, se genera uno automáticamente.
*!* lnCab: Nº de lineas antes de la que contiene los
nombres de columnas (Opc.)
*!* lcDelim: Carácter delimitador de campos, si el archivo que se
está leyendo es un CSV. (Opc.)
*!* Si el archivo es XLS o XLSX, no se tomará en cuenta.
*!* lnHojas: Nº de hojas a leer (incluida la 1ª). Si se omite, se
tomará 1. Si se pasa '999', tomará todas. (Opc.)
*!* lnIniCol: Nº de columna donde se encuentra el 1er. campo a
leer. Por omisión 1. (Opc.)
*!*
*!* Valor Devuelto: Nombre del cursor generado (Char)
***********************************************************************************
*******************************************
*!* Ejemplo de uso:
*!* From_Excel("C:\EXODUS\CLIENTES.XLS","MisClientes")
*!* From_Excel("C:\EXODUS\CLIENTES.XLSX","MisClientes")
*!* myCur = From_Excel("C:\EXODUS\CLIENTES.XLS",,2) --> La variable
'myCur', devolverá el nombre del cursor generado.
***********************************************************************************
*******************************************
Local lcXLBook, lcCursor, lnSheetCount, lnSheet
*
If Vartype(lcXls)<>'C'
lcXLBook = Getfile('xls, xlsx, xlsm, xlsb, csv, slk', 'Archivo:',
'Aceptar', 0, 'Seleccione una hoja excel')
Else
lcXLBook = lcXls
Endif
If Empty(m.lcXLBook)
Return .F.
Endif
If Empty(Justpath(lcXLBook))
lcXLBook = Fullpath("") + lcXLBook
Endif
If Not File(m.lcXLBook)
Messagebox("Archivo no encontrado", 16)
Return .F.
Endif
If Vartype(lcCur)<>'C'
lcCursor = Sys(2015)
Else
If !Empty(lcCur)
lcCursor = lcCur
Else
lcCursor = Sys(2015)
Endif
Endif
* Comprobar variable con nº lineas antes del encabezado con los nombres de
campos
If Vartype(lnCab)<>'N'
lnCab = 0
Endif
*-
*-- Crear Objeto Excel
Local loExcel As Excel.Application
loExcel = Createobject("Excel.application")
* Comprobar nº de hojas
If lnHojas = 999
lnSheetCount = m.loExcel.sheets.Count
Else
lnSheetCount = lnHojas
Endif
loExcel.DisplayAlerts = .F.
m.loExcel.ActiveWindow.Close(.F.)
m.loExcel.Quit()
loExcel = Null
Return lcCursor
Endfunc
*-----------------------------------------------------------------------------
Procedure Sheet2Cursor(toExcel As Excel.Application, tnSheet As Integer, tnCab As
Integer, tnIni As Integer)
#Define xlLastCell 11
If tnSheet > 1
tnCab = 0
Endif
m.toExcel.sheets(1).Select
lcSheet = m.toExcel.sheets(m.tnSheet).Name
With m.toExcel.ActiveWorkBook.ActiveSheet
loLastCell = .Cells.SpecialCells( xlLastCell )
laTit = .Range(.Cells(1 + tnCab, tnIni), .Cells(1 + tnCab,
m.loLastCell.Column)).Value
laData = .Range(.Cells(2 + tnCab, tnIni), m.loLastCell).Value
Endwith
lnColumns = Alen(m.laTit)
lnFilas = Alen( m.laData, 1 )
Dimension m.laCampo[m.lnColumns, 18]
laCampo = ""
For lnCol = 1 To m.lnColumns
*
cTitulo = Chrtran(m.laTit[m.lnCol],[ºªÜÁÉÍÓÚüáéíóú ()/\.,%],
[oaUAEIOUuaeiou_____]) && m.laTit[m.lnCol]
cTitulo = Strtran(m.cTitulo,[__],[_])
lcTipoCampo = Vartype(m.laData[2, m.lnCol])
*
laCampo[m.lnCol, 1] = m.cTitulo
laCampo[m.lnCol, 2] = m.lcTipoCampo
laCampo[m.lnCol, 3] = 1
laCampo[m.lnCol, 4] = 0
laCampo[m.lnCol, 5] = .T.
laCampo[m.lnCol, 6] = .F.
laCampo[m.lnCol, 17] = 0
laCampo[m.lnCol, 18] = 0
If m.lcTipoCampo $ "DT"
laCampo[m.lnCol, 3] = 8
laCampo[m.lnCol, 4] = 0
Endif
Endfor
Endproc
*-----------------------------------------------------------------------------
Function DigEnt(tnNumero As Number)
Endfunc
*-----------------------------------------------------------------------------
Function DigDec(tnNumero As Number)
lnSetDecim = Set("Decimals")
Set Decimals To 18
Return Len(m.lcDigDec)
Endfunc