Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Servers
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 948
Poder: 25
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
  #2  
Antiguo 05-05-2012
Avatar de DarkBlue
DarkBlue DarkBlue is offline
Miembro
 
Registrado: jun 2010
Posts: 105
Poder: 17
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
  #3  
Antiguo 05-05-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví 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
  #4  
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
  #5  
Antiguo 02-06-2012
Avatar de DarkBlue
DarkBlue DarkBlue is offline
Miembro
 
Registrado: jun 2010
Posts: 105
Poder: 17
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
  #6  
Antiguo 02-06-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví 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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 15:19:42.


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