Hola a todos
Pues eso, como copiar de un DBGrid (algunas filas o todas) y Pegar en Excel o en Word
Un usuario me pidio la posibilidad de poder copiar un conjunto de datos (de un DBGrid) y pegarlo en Excel para manipularlo a su gusto.
De que forma podria hacer esto?
Como copiar de un DBGrid (algunas filas o todas) y Pegar en Excel u otro
Comenzado por
JoAnCa
, may 30 2009 01:02
7 respuestas en este tema
#1
Escrito 30 mayo 2009 - 01:02
#2
Escrito 30 mayo 2009 - 01:22
Los datos no salen del dbgrid, salen del Dataset asociado a este, yo utilizo la siguiente rutina para ese fin, seria cosa que lo adpataras.
delphi
var Hoja: OleVariant; Excel: Variant; fila, columna, Indice:Integer; cCampos: String; begin // Crea objeto Excel. try Excel := CreateOleObject('Excel.Application'); except showmessage('No se pudo crear el Objecto Excel.'); Exit; end; if opendialogxls.Execute then Excel.Workbooks.Open(opendialogxls.FileName); // Abre libro Excel Hoja := Excel.Worksheets.Item['Hoja1']; // Abre Hoja 'Datos'. Hoja.Activate; Fila := 2; sqDatos.DisableControls; while not sqDatos.Eof Do begin for Columna := 1 to sqDatos.FieldDefs.Count do begin Excel.Cells[Fila,Columna].value := sqDatos.Fields[Columna - 1].AsString; end; Inc(Fila); sqDatos.Next; end; sqDatos.EnableControls; showmessage('REPORTE GENERADO!'); // Cierra archivo excel. try Excel.Quit; except ShowMessage('La aplicación Excel no se pudo finalizar automaticamente.'); Excel.Visible := True; end; end;
#3
Escrito 30 mayo 2009 - 01:32
Si, esa parte de pasar del Dataset a Excel lo entiendo bien, el problema se me dificulta en como saber cuales filas del DBGrid seleccionó el usuario.
Para el caso de que sean todas, no hay problema, se resuelve con el codigo que me dices, pero en el caso de que sean solo algunas?
El usuario quiere:
1- Seleccionar varias filas del DBGrid
2- Opcion de Copiar
3- Pegar en Excel
Y ahi me enredé, como determinar cuales registros se corresponden con las filas seleccionadas
Para el caso de que sean todas, no hay problema, se resuelve con el codigo que me dices, pero en el caso de que sean solo algunas?
El usuario quiere:
1- Seleccionar varias filas del DBGrid
2- Opcion de Copiar
3- Pegar en Excel
Y ahi me enredé, como determinar cuales registros se corresponden con las filas seleccionadas
#4
Escrito 30 mayo 2009 - 01:40
ahi si tendrias que extraer la informacion del dbgrid, ir fila por fila preguntando si esta seleccionada y de ser positivo pasarla a excel en fila y columna.
No tengo delphi a mano pero creo que la propiedad es "IsSelected"
No tengo delphi a mano pero creo que la propiedad es "IsSelected"
#5
Escrito 30 mayo 2009 - 02:12
tampoco es cosa de enrrollarse, ya abri el delphi y vi como puede ser:
solo es cuestion de saber cual fila esta seleccionada y ubicar su respectivo registro en el dataset, recuerda seleccionar a True la opcion Multiselect del dbgrid.
delphi
var Hoja: OleVariant; Excel: Variant; fila, columna, Indice:Integer; cCampos: String; begin //Si no hay filas seleccionadas if DBGrid1.SelectedRows.Count=0 then begin ShowMessage('Debe seleccionar las filas'); Exit; end; // Crea objeto Excel. try Excel := CreateOleObject('Excel.Application'); except showmessage('No se pudo crear el Objecto Excel.'); Exit; end; if opendialogxls.Execute then Excel.Workbooks.Open(opendialogxls.FileName); // Abre libro Excel Hoja := Excel.Worksheets.Item['Hoja1']; // Abre Hoja 'Datos'. Hoja.Activate; Fila := 1; //Recorre las filas seleccionadas for Indice :=0 to DBGrid1.SelectedRows.Count-1 do begin //Selecciona la fila indicada GotoBookmark(pointer(DBGrid1.SelectedRows.Items[Indice])); //Pasa los campos como columnas en excel for Columna := 1 to DBGrid1.DataSource.DataSet.FieldDefs.Count do begin Excel.Cells[Fila,Columna].value := DBGrid1.DataSource.DataSet.Fields[Columna - 1].AsString; end; Inc(Fila); end; showmessage('REPORTE GENERADO!'); // Cierra archivo excel. try Excel.Quit; except ShowMessage('La aplicación Excel no se pudo finalizar automaticamente.'); Excel.Visible := True; end; end;
solo es cuestion de saber cual fila esta seleccionada y ubicar su respectivo registro en el dataset, recuerda seleccionar a True la opcion Multiselect del dbgrid.
#6
Escrito 30 mayo 2009 - 02:40
gracias eduarcol, lo probraré enseguida
#7
Escrito 30 mayo 2009 - 02:44
gracias eduarcol, lo probraré enseguida
cualquier duda recuerda que estaremos por aqui
#8
Escrito 01 junio 2009 - 07:01
De tanto buscar tambien encontré en las JEDI VCL, dos componentes para exportar a Excel, que talvez a alguien mas le pueda interesar
- JvDBGridExcelExport Exporta el contenido de un DBGrid para Excel
- JvgExportExcel Exporta el contenido de un Dataset para Excel
Son muy fáciles de usar
- JvDBGridExcelExport Exporta el contenido de un DBGrid para Excel
- JvgExportExcel Exporta el contenido de un Dataset para Excel
Son muy fáciles de usar