Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Servers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2010
Avatar de DarkBlue
DarkBlue DarkBlue is offline
Miembro
 
Registrado: jun 2010
Posts: 105
Poder: 14
DarkBlue Va por buen camino
ayuda urgente con funcion y excel

hola que tal estaba usando excel y delphi y necesitaba validar los datos... de alguna manera traer el resultado a delphi compararlo y modificar el valor de la hoja de excel bueno aqui les dejo mi codigo pero no me funciona al 100% el problema es que me sigue trayendo el mismo valor... siempre es true y aunque deba de dar false no cambia el resultado de la funcion


Código Delphi [-]
for X:=0 to npiezas-1 do //recorro el numero de items que tiene la hoja de excel
begin


    c:=X+fila;//comienzo siempre desde la fila 2
    A:='A'+inttostr(c);
    B:='B'+inttostr(c);
    F:='=ISBLANK(R[-4]'+'C[-'+inttostr(x+1)+'])';//creo una formula
    F2:='=ISTEXT(R[-4]'+'C[-'+inttostr(x+1)+'])';//otra formula

    formulaString2:=F2;//le asigo el valor de la formula
    XLS.Range['F1','F1'].select;//selecciono ese rango
    XLS.Selection.ClearContents;//borro lo que pueda haber

    XLS.Range['F1','F1'].formula:=formulastring2;//le pongo la formula


    v:=tostring(XLS.Range['F1','F1'].select);//llamo a una funcion para copiar el valor
    if  v= 'True' then XLS.Range[B,B].value:='0';     //si es texto verdadero
    
    showmessage(tostring(XLS.Range[B,B])); mostramos lo que trae la funcion
    listainserta.Items.Add(tostring(XLS.Range[B,B])); //insertamos el valor en una lista de delphi
    XLS.Range[A,A].copy;
    nombrepieza.Items.Add(tostring(XLS.Range[A,A]));//insertamos el nombre del item


end;


aqui esta la funcion que me permite copiar valores desde excel ...


Código Delphi [-]
function ToString(V: Variant): String;
begin
  Result := V;
end;

si saben por que me sigue dando siempre true... aunque en realidad el resultado de la funcion que aplico en excel da false ... ayuda urgente me queda poco tiempo y no se que hacer... :S muchas gracias y espero que este codigo le sirva a alguien =)
__________________
Todo es Relativo

Última edición por Neftali [Germán.Estévez] fecha: 11-08-2010 a las 11:34:48. Razón: EDITADO (Neftalí): Para añadir las etiquetas al código
Responder Con Cita
  #2  
Antiguo 11-08-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Lo que no me queda claro es si los datos son incorrectos en Excel o al traerlos a Delphi.

Cuando añadas código, intenta colocar las etiquetas para que se lea correctamente.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 11-08-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Amigo me tome la libertad de hacer algunos cambios a tu codigo, yo personalmente prefiero trabajar con las coordenadas de las hojas...

Es decir hago referencia a Filas y columnas de una hoja excel y utilizo una funcion para transformar los numeros de filas y columnas a formato letranumero.

Ejemplo : Fila=1, Columna=1 hace referencia A1.

Bueno aqui esta el codigo te agrege dos funciones...

Código Delphi [-]
  {Combierte el indice de la columna a su respectiva letra de columna
  Index=1-> A,  Index=6->F, Index=27->AA}
  Function ExcelColToChar(Index : Integer) : String;
  Begin
       If Index < 1 then
          Result:='A'
       Else
       Begin
            If Index > 702 Then
               Result:='ZZ'
            Else
            Begin
                 If Index > 26 Then
                 Begin
                      If (Index Mod 26)=0 Then
                         Result:=Chr(64 + (Index Div 26)-1)
                      Else
                         Result:=Chr(64 + (Index Div 26));

                      If (Index Mod 26)=0 Then
                         Result:=Result+Chr(64+26)
                      Else
                          Result:=Result+Chr(64 + (Index Mod 26));
                 End
                 Else
                     Result:=Chr(64 + Index);
            End;
       End;
  End;

  {Convierte Filas y columnas a formato Excel
  Ejm:
     Row1=1, Col1=1, Row2=1, Col2=1 -> A1:A1

     A(1)    B(2)    C(3)   ExcelSetRange(Row1, Col1, Row2, Col2)
   1  1,1   1,2      1,3    ExelSetRange(1,1,1,1) ->A1:A1
   2  2,1   2,2      2,3    ExelSetRange(1,2,3,2) ->B1:B3
   3  3,1   3,2      3,3    ExelSetRange(3,3,3,3) ->C3:C3
  }

  Function ExcelSetRange(Row1, Col1, Row2, Col2:Integer):String;
  Begin
       Result:=Format('%s%d:%s%d',[ExcelColToChar(Col1),Row1,ExcelColToChar(Col2),Row2 ]);
  End;


...
Var
    Value:Variant;
begin
     c:=X+fila;

          A:=ExcelSetRange(C,1,C,1);
          B:=ExcelSetRange(C,2,C,2);

          strFormula:=Format('=ISTEXT(%s)',[ExcelSetRange(c,1,c,1)]) ;

          {ExcelSetRange(1,6,1,6)->F1}
          F1:=ExcelSetRange(1,6,1,6);

          oXLS.Range[F1].Select;
          oXLS.Selection.ClearContents;
          oXLS.Range[F1].Formula:=strFormula;

          Value:=oXLS.Range[F1].select;
          {Pregunta por el tipo del Value que como es de tipo Variant}
          if ((VarType(Value)=varBoolean) And (Value))Then
             oXLS.Range[b].Value:='0';

          Showmessage(ToString(oXLS.Range[b]));
          ListaInserta.Items.Add(ToString(oXLS.Range[b]));
          oXLS.Range[A].copy;
          NombrePieza.Items.Add(ToString(oXLS.Range[A]));

En negrita los cambios que me tome la libertad de modificar...

Nota: Eso de urgente en los titulos de los post, aqui no corre lee la guia de estilo...

Saludos cordiales

Última edición por cloayza fecha: 11-08-2010 a las 16:27:04.
Responder Con Cita
  #4  
Antiguo 05-05-2012
Avatar de DarkBlue
DarkBlue DarkBlue is offline
Miembro
 
Registrado: jun 2010
Posts: 105
Poder: 14
DarkBlue Va por buen camino
hola, tiempo despues solucione esto pero creo que perdi el codigo asi que tu implementacion de esto no me funciono

Código Delphi [-]


                      WS := XLApplication.ActiveSheet ;

                      F2:='=IsText(E'+inttostr(xx)+')';
                      WS.Range['e5', 'e5'].Formula := f2 ;
                      WS.Range['E6','E6'].select;

                    v1:= XLApplication.Range['E5','E5'].select;
                   showmessage(tostring( XLApplication.Range['E5','E5'].select));

                 if ((VarType(v1)=varBoolean) And (v1))Then     ws.cells[xx,5].value:='0';

no se que hice mal
__________________
Todo es Relativo
Responder Con Cita
  #5  
Antiguo 05-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, DarkBlue, procura poner títulos descriptivos a tus preguntas. Si echas un vistazo a nuestra guía de estilo verás que una de los apartados habla sobre ese tema, eso de "ayuda urgente..." no está "bien visto"
Por supuesto, esto ya para el siguiente mensaje, este es de hace tiempo
Responder Con Cita
  #6  
Antiguo 07-05-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues sí, no sé yo si lo de urgente tenga relevancia dos años después En todo caso, lo que queda claro es que el compañero no se tomó la molestia de dar las gracias en su momento y sólo retorna al hilo ahora que tiene problemas. Eso es feo.

// Saludos
Responder Con Cita
  #7  
Antiguo 02-06-2012
Avatar de DarkBlue
DarkBlue DarkBlue is offline
Miembro
 
Registrado: jun 2010
Posts: 105
Poder: 14
DarkBlue Va por buen camino
mil perdones, no quise hacer eso creo que busque en otro lado encontrando la solucion mi prisa me hizo olvidarme de esto mil anos despues disculpas!!! muchas gracias a todos los que me han ayudado bueno la sintesis de esto es que excel retorna valores -1 y 1 para los boleanos aver

Código Delphi [-]
 F2:='=IsText(E'+inttostr(xx)+')';
                      WS.Range['e5', 'e5'].Formula := f2 ;
                      WS.Range['E5','E5'].select;

                       v1:= XLApplication.Sheets[1].Cells[5,5]; //XLApplication.Range['E5','E5'].select;

                       b:=tostring(v1);

                       if (b='-1')Then   ws.cells[xx,5].value:='0';
                       XLApplication.Range['E5','E5'].select;
                       XLApplication.Selection.ClearContents;

                       F2:='=IsBlank(E'+inttostr(xx)+')';
                       WS.Range['e5', 'e5'].Formula := f2 ;
                       WS.Range['E5','E5'].select;

                       v1:= XLApplication.Sheets[1].Cells[5,5]; //XLApplication.Range['E5','E5'].select;

                       b:=tostring(v1);

ademas de que tienes que poner en ingles las formulas :S
__________________
Todo es Relativo
Responder Con Cita
  #8  
Antiguo 02-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por DarkBlue Ver Mensaje
ademas de que tienes que poner en ingles las formulas :S
Eso es de lo "bien" que está hecho, una auténtica chapuza.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Añadir función celda de Excel Firibiri Servers 6 28-06-2014 12:16:12
Macros en Excel. Función similar a CONTAR.SI Delphius Varios 5 11-05-2007 22:16:46
Excel Y La Funcion Sub ASAPLTDA Windows 1 03-06-2005 04:19:32
Funcion Excel herodes Varios 2 23-02-2005 20:27:02
Funcion Sumar.Si de Excel. Andree Varios 5 15-12-2004 23:20:11


La franja horaria es GMT +2. Ahora son las 22:29:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi