PDA

Ver la Versión Completa : Copiar el contenido de un dbgrid y pegarlo en otro lado


ctronx
25-01-2005, 09:27:09
Saludos, como podria Copiar el contenido de un dbgrid y pegarlo en otro lado como por ejemplo excel, podria hacerse de la forma siguiente??
1.-seleccionar las filas del dbgrid (todo el dbgrid)
2.-copiarlas (como edicion copiar ó control-c)
3.-en Excel pegarlas (como edicion pegar ó control-v)

Gracias por la ayuda que puedan darme.

Neftali [Germán.Estévez]
25-01-2005, 11:58:17
...como podria Copiar el contenido de un dbgrid y pegarlo en otro lado como por ejemplo excel, podria hacerse de la forma siguiente??
1.-seleccionar las filas del dbgrid (todo el dbgrid)
2.-copiarlas (como edicion copiar ó control-c)
3.-en Excel pegarlas (como edicion pegar ó control-v)

Bueno para poder "pegar" el contenido del DBGrid en Excel, debes "mardar" al portapapeles un string con formato determinado; Para separar las líneas un CRLF y para los campos dentro de una fila un TAB. Con eso conseguirás que en Excel se "pegue" correctamente.

Se trata de recorrer las filas seleccionadas (Bookmarks) y crear un string con los datos.

En el botón de copiar coloca el siguiente código:


var
i, j: Integer;
s: string;
begin
// Hay varias seleccionadas
if (DBGrid1.SelectedRows.Count > 0) then begin
with DBGrid1.DataSource.DataSet do
// Para cada fila seleccioada
for i:=0 to (DBGrid1.SelectedRows.Count-1) do begin
// ir a la fila
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
// Para cada columna
for j := 0 to FieldCount-1 do begin
// Separador dentro de la fila (TAB)
if (j>0) then begin
s:=s + #9;
end;
s:=s+Fields[j].AsString;
end;
// Separador de fila (CRLF)
s:=s + #13#10;
end;
end;

// Copiar al portapapeles.
Clipboard.AsText := s;


Añade a la unit la unit Clipbrd;
El DBGrid debe tener las opciones dbRowSelect y dgMultiSelect activadas.

ctronx
25-01-2005, 16:37:36
Muchas Gracias, tus indicaciones funcionan sin problemas.
Hay manera de seleccionar todas las filas del dbgrid de un solo paso?.

Neftali [Germán.Estévez]
25-01-2005, 17:17:01
Sí se puede con una pequeña rutinilla que puedes encontrar en éste hilo.

http://www.clubdelphi.com/foros/showthread.php?t=17292