Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Copiar el contenido de un dbgrid y pegarlo en otro lado (https://www.clubdelphi.com/foros/showthread.php?t=17890)

ctronx 25-01-2005 09:27:09

Copiar el contenido de un dbgrid y pegarlo en otro lado
 
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

Cita:

Empezado por ctronx
...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:

Código Delphi [-]
  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


La franja horaria es GMT +2. Ahora son las 21:05:29.

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