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; Clipboard.SetTextBuf(Datos.GetText); 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; 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.