Ver Mensaje Individual
  #7  
Antiguo 20-02-2007
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Reputación: 18
Flecha Va por buen camino
Exclamation Una cosita más


De nada, hombre. Para eso estamos.

Por cierto acabo de acordarme de que no es necesario recurrir al TMemo para utilizar el Clipboard.

Existe una unidad llamada ClipBrd que implementa el uso de objetos TClipboard, los cuales permiten trabajar con el ClipBoard de Windows.

A continuación el mismo truco que antes, pero con el uso de la unidad ClipBrd.

Código Delphi [-]
procedure TMiForm.PegarDatos;
var x:integer;
begin
      x:=0;
      Clipboard.Clear;                     // Borrar el contenido del ClipBoard
      Clipboard.SetTextBuf(Datos.GetText); // Copiar texto en el ClipBoard
      try
        repeat
          try
            MiExcel.ActiveSheet.Paste( MiExcel.ActiveSheet.Cells[ 1,1 ], False);
            break;
          except
            inc(x);
            if x>=20 Then raise;
          end;
        until false;
      finally
        Clipboard.Clear; // Borrar el contenido del ClipBoard
      end;
      FilasDatos := 0;
      Datos.Clear;
end;

En este ejemplo Datos es del tipo TStringList. ClipBoard no es un objeto, sino una función perteneciente a la unidad ClipBrd que retorna un objeto TClipBoard. El método SetTextBuf es el que copia texto en el ClipBoard de Windows. Este método recibe un PChar, por eso le paso el GetText del TStringList en vez del Text.
En este ejemplo, además, el ClipBoard de Windows queda vacío después de cada copia.

Como dije antes, el lado bueno de este truco es la velocidad de copiado sobre el documento Excel. Pero olvidé decir que hay que tener cuidado con los posibles copy-paste que el usuario esté haciendo por otro lado mientras este proceso se está ejecutando. Si el documento Excel que estás construyendo es tan sumamente grande que aunque utilices este truco, tarda mucho tiempo en terminarse de construir, el usuario podría aprovechar su tiempo abriendo otra aplicación distinta (por ejemplo un documento Word) para trabajar con ello mientras tu proceso termina. Los copy-paste que el usuario haga en esa otra aplicación podrían interferir perjudicialmente en la creación de tu documento Excel. Podrían copiarse en tu Excel los copy que el usuario hace en su Word, o copiarse sobre el Word del usuario lo que estas intentando exportar a tu documento Excel.

No todo podían ser buenas noticias.
Responder Con Cita