Page 1 of 1

Ayuda con importar datos desde XLS

Posted: Mon Feb 07, 2011 7:01 pm
by JoseGS
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...

Re: Ayuda con importar datos desde XLS

Posted: Tue Feb 08, 2011 6:38 am
by anserkk
I don't know whether I understood your requirement correctly

If you want to store data on excel as text/string, then it is better that you change the format of the column to text format prior to setting the value.

Code: Select all

oExcel:Range("A1"):NumberFormat = "@"
oExcel:Range("A1"):Value = 12345
 

Regarding getting Data from Excel
Using automation, you can write loops which go through a worksheet cell-by-cell reading the data. Although this technique is relatively simple, it appears to be universally acknowledged as being very slow.

If you use an array to populate a worksheet, It turns out that it is very simple, and also very fast, to use automation to read data from Excel into an array.

Mr.Rao has already given a sample and explanation regarding this here http://forums.fivetechsupport.com/viewt ... =3&t=20763

Regards
Anser

Re: Ayuda con importar datos desde XLS

Posted: Tue Feb 08, 2011 3:16 pm
by JoseGS
Gracias por contestar, creo que eso es lo que necesito...