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...
Ayuda con importar datos desde XLS
Re: Ayuda con importar datos desde XLS
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.
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
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
Gracias por contestar, creo que eso es lo que necesito...