Ayuda con importar datos desde XLS
Posted: Mon Feb 07, 2011 7:01 pm
Hola amigos del foro
Tengo un sistema de facturacion y un cliente me ha pedido que incorpore un metodo que le permita abrir una hoja de XLS y escribir en la misma dos columnas de datos; CODIGO y CANTIDAD de manera que cuando el recibe un pedido grande pueda usarla a modo de plantilla para escribir los codigos de los productos y las cantidades a facturar. Luego por medio de un boton, se lee el contenido de esa hoja de XLS y se pasan los datos al programa.
Todo funciona muy bien, pero me gustaria saber si esposible mejorar lo siguiente
Llamo a la funcion MAKEXLS({'CODIGO','CANTIDAD'},'COD2INVO'})
para abrir la hoja de XLS que servira de plantilla. Aqui viene la primera pregunta: Como puedo hacer para indicarle a XLS que el formato de la columna codigo es texto, ya que actualmente mi cliente, antes de empezar a escribir los datos en la misma debe indicar en forma manual esto para que al agregar un codigo ejemplo 1000, quede justificado a la izq como texto y no a la derecha como numero.
//---------------------------------------------------------------------------------------------------------------------
FUNC MAKEXLS(aCAMPOS,cNOMBRE)
LOCAL oExcel,C,cOrigen:=aConfig[11]+'XLS\'+cNOMBRE+'.XLS',N2:=1,Y,CAMPO
ERASE &cOrigen
oExcel := TExcelScript():New()
oExcel:Create( cOrigen )
FOR C=1 TO LEN(aCAMPOS)
oExcel:Say( 1 , C , aCAMPOS[C],'Arial',10,.T.,,,1)
NEXT
oExcel:Visualizar(.T.)
oExcel:Save( )
RETU[]
y corregir esto:
Cuando el cliente ha guardado la hoja y la incorpora en la factura, los codigos que no tienen letras son incluidos en formato numerico con punto y 2 decimales...
Como puedo hacer para que sean leidos como textos...
Esta es la funcion que lee la hoja de XLS y la pasa al sistema de facturacion...
cFILE:=aConfig[11]+'XLS\COD2INVO.XLS'
IF !FILE((cFILE))
MsgStop('No se ha encontado el archivo '+cFILE,'Atencion...!')
RETU[]
ENDIF
oExcel := TOleAuto():New( "Excel.Application" )
oExcel:WorkBooks:Open(cFILE)
oHoja=oExcel:ActiveSheet
nRows := oHoja:UsedRange:Rows:Count()
nCols := oHoja:UsedRange:Columns:Count()
INVOICE->(DBGOTOP())
INVENT->(DBSETORDER(1))
FOR X=2 TO nRows
aDATOS:={}
FOR Y=1 TO nCols
AADD(aDATOS,oHoja:Cells(X,Y):Value)
NEXT
INVOICE->CODIGO :=PADR(aDATOS[1],20)
IF !INVENT->(DBSEEK( PADR(aDATOS[1],20) ))
INVOICE->DESCRIP:='El producto indicado no existe...????'
ELSE
INVOICE->CANTIDAD:=aDATOS[2]
INVOICE->DESCRIP:=INVENT->DESCRIP1
INVOICE->PRECIO :=INVENT->PRECIO1
INVOICE->STOTAL :=INVENT->PRECIO1*INVOICE->CANTIDAD
ENDIF
INVOICE->(DBSKIP())
NEXT
INVOICE->(DBGOTOP())
oExcel:WorkBooks:Close()
Gracias por la ayuda que me puedan brindar...
Tengo un sistema de facturacion y un cliente me ha pedido que incorpore un metodo que le permita abrir una hoja de XLS y escribir en la misma dos columnas de datos; CODIGO y CANTIDAD de manera que cuando el recibe un pedido grande pueda usarla a modo de plantilla para escribir los codigos de los productos y las cantidades a facturar. Luego por medio de un boton, se lee el contenido de esa hoja de XLS y se pasan los datos al programa.
Todo funciona muy bien, pero me gustaria saber si esposible mejorar lo siguiente
Llamo a la funcion MAKEXLS({'CODIGO','CANTIDAD'},'COD2INVO'})
para abrir la hoja de XLS que servira de plantilla. Aqui viene la primera pregunta: Como puedo hacer para indicarle a XLS que el formato de la columna codigo es texto, ya que actualmente mi cliente, antes de empezar a escribir los datos en la misma debe indicar en forma manual esto para que al agregar un codigo ejemplo 1000, quede justificado a la izq como texto y no a la derecha como numero.
//---------------------------------------------------------------------------------------------------------------------
FUNC MAKEXLS(aCAMPOS,cNOMBRE)
LOCAL oExcel,C,cOrigen:=aConfig[11]+'XLS\'+cNOMBRE+'.XLS',N2:=1,Y,CAMPO
ERASE &cOrigen
oExcel := TExcelScript():New()
oExcel:Create( cOrigen )
FOR C=1 TO LEN(aCAMPOS)
oExcel:Say( 1 , C , aCAMPOS[C],'Arial',10,.T.,,,1)
NEXT
oExcel:Visualizar(.T.)
oExcel:Save( )
RETU[]
y corregir esto:
Cuando el cliente ha guardado la hoja y la incorpora en la factura, los codigos que no tienen letras son incluidos en formato numerico con punto y 2 decimales...
Como puedo hacer para que sean leidos como textos...
Esta es la funcion que lee la hoja de XLS y la pasa al sistema de facturacion...
cFILE:=aConfig[11]+'XLS\COD2INVO.XLS'
IF !FILE((cFILE))
MsgStop('No se ha encontado el archivo '+cFILE,'Atencion...!')
RETU[]
ENDIF
oExcel := TOleAuto():New( "Excel.Application" )
oExcel:WorkBooks:Open(cFILE)
oHoja=oExcel:ActiveSheet
nRows := oHoja:UsedRange:Rows:Count()
nCols := oHoja:UsedRange:Columns:Count()
INVOICE->(DBGOTOP())
INVENT->(DBSETORDER(1))
FOR X=2 TO nRows
aDATOS:={}
FOR Y=1 TO nCols
AADD(aDATOS,oHoja:Cells(X,Y):Value)
NEXT
INVOICE->CODIGO :=PADR(aDATOS[1],20)
IF !INVENT->(DBSEEK( PADR(aDATOS[1],20) ))
INVOICE->DESCRIP:='El producto indicado no existe...????'
ELSE
INVOICE->CANTIDAD:=aDATOS[2]
INVOICE->DESCRIP:=INVENT->DESCRIP1
INVOICE->PRECIO :=INVENT->PRECIO1
INVOICE->STOTAL :=INVENT->PRECIO1*INVOICE->CANTIDAD
ENDIF
INVOICE->(DBSKIP())
NEXT
INVOICE->(DBGOTOP())
oExcel:WorkBooks:Close()
Gracias por la ayuda que me puedan brindar...