Delphi - Exportar a excel

 
Vista:

Exportar a excel

Publicado por Luis Felipe (4 intervenciones) el 30/03/2006 00:07:27
Hola amigos,

tengo un problema necesito exportar datos de un dbgrid a un excel, estube mirando el foro mucho rato y me di cuenta que es lo mismo que enviar la consulta que tengo enlasada a la dbgrid a excel, el problema es que no puedo osea mas bien no se como generar dicho enlase, tambien me di cuenta que tengo que tener algo relacionado con OLE y no se como creo que son las librerias, bueno en fin estoy con unas dudas terribles de como lograr dicho objetivo y lo peor es que estoy contra el tiempo...

gracias nuevamente y espero que me puedan ayudar...

saludos..Luis Felipe
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Exportar a excel

Publicado por marian (4 intervenciones) el 30/03/2006 13:39:44
procedure TForm1.Button2Click(Sender: TObject);
var
fila:Integer;
begin
ExcelApplication1.Connect;
ExcelApplication1.Visible[0]:=true;
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
ExcelWorkSheet1.ConnectTo(ExcelApplication1.Sheets[1]as _WorkSheet);
query.First;
ExcelWorkSheet1.Cells.Item[1,1].Value := 'ID';
ExcelWorkSheet1.Cells.Item[1,2].Value := 'Autor';
ExcelWorkSheet1.Cells.Item[1,3].Value := 'Traductor';
ExcelWorkSheet1.Cells.Item[1,4].Value := 'Titulo Original';
ExcelWorkSheet1.Cells.Item[1,5].Value := 'Titulo Traduccion';
ExcelWorkSheet1.Cells.Item[1,6].Value := 'Editorial';
ExcelWorkSheet1.Cells.Item[1,7].Value := 'Ciudad';
ExcelWorkSheet1.Cells.Item[1,8].Value := 'ISBN';
ExcelWorkSheet1.Cells.Item[1,9].Value := 'Año';

ExcelWorkSheet1.Range['A1','I1'].Font.Bold := True;

ExcelWorkSheet1.Range['A1','A1'].ColumnWidth := 11;
ExcelWorkSheet1.Range['B1','B1'].ColumnWidth := 45;
ExcelWorkSheet1.Range['C1','C1'].ColumnWidth := 40;
ExcelWorkSheet1.Range['D1','D1'].ColumnWidth := 40;
ExcelWorkSheet1.Range['E1','E1'].ColumnWidth := 50;
ExcelWorkSheet1.Range['F1','F1'].ColumnWidth := 20;
ExcelWorkSheet1.Range['G1','G1'].ColumnWidth := 17;
ExcelWorkSheet1.Range['H1','H1'].ColumnWidth := 12;
ExcelWorkSheet1.Range['I1','I1'].ColumnWidth := 11;

Fila:=2;

while not query.Eof Do
with ExcelWorkSheet1.Cells Do Begin
Item[Fila,1].value := QueryID.Value;
Item[Fila,3].value := QueryTraductor.Value;
Item[Fila,2].value := QueryAutor.Value;
Item[Fila,4].value := QueryTituloOriginal.Value;
Item[Fila,5].value := QueryTituloTraduccion.Value;
Item[Fila,6].value := QueryEditorial.Value;
Item[Fila,7].value := QueryCiudad.Value;
Item[Fila,9].value := QueryAnno.Value;
Item[Fila,8].value := QueryISBN.Value;
Inc(Fila);
query.Next;
end;
ExcelWorkSheet1.Disconnect;
ExcelWorkBook1.Connect;
ExcelApplication1.Connect;
end;

Yo he utilizado este código, necesitas insertar un TexcelAplication
un TExcelWorkBook y un TExcelWorkSheet y esa es la programacion de un boton q exporta.

Espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Exportar a excel No me resulta..

Publicado por Luis Felipe (4 intervenciones) el 30/03/2006 19:02:31
Hola entendi claro lo que hace pero tengo un pequeño proble en la parte donde pasamos los valores de la consulta en mi caso deberia aser asi

while not query1.Eof Do
with ExcelWorkSheet1.Cells Do Begin
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;

pero al momento de ejecutarla me abre la hoja todo pero no me inserta los datos de la consulta ??

gracias me sirvio mucho lo anterior pero no entiendo como sacar los resultados de la consulta esta es la consulta.. que tengo
SELECT Distinct Transacciones_Validas.Num_Operacion, Transacciones_Validas.Fecha, Transacciones_Validas.Hora,Tipo_Operación.Descripción, Estacion.Nombre As Nombre_Estacion, Transacciones_Validas.Id_Pos , Transacciones_Validas.Num_Torniquete, Transacciones_Validas.Monto,Transacciones_Validas.Remanente, Arreglos.Nombre_Arreglo
FROM Transacciones_Validas, Tarjetas_Historico, Pos, Estacion,Tipo_Operación, Arreglos
WHERE Tarjetas_Historico.Num_Fisico = :T and Transacciones_Validas.Fecha >= :Fi and Transacciones_Validas.Id_Tarjeta = Tarjetas_Historico.Id_Tarjeta
and Transacciones_Validas.Id_Estacion = Estacion.Id_Estacion
and Transacciones_Validas.Id_Tpo_Operacion = Tipo_Operación.Id_Tpo_Operacion
and Transacciones_Validas.Id_Arreglo = Arreglos.Id_Arreglo ;

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Exportar a excel

Publicado por marian (4 intervenciones) el 31/03/2006 09:00:52
Hola,

No se porque no lo mostrará, yo no veo error. Seguramente ya hallas intentado mostrar la misma query en un datagrid, pero si no lo has hecho estaría bien que probaras para asegurarte de que esta todo bien.

SI esta todo bien prueba a en lugar de poner
Query1.FieldbyName('nombrecampos').Value; El nombre del campo sin mas
ejemplo
Query1Transacciones_Básicas.Value ; por ejemplo para ver si realmente le pasa los datos.

Espero poder ayudarte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Exportar a excel No me resulta..

Publicado por Luis Felipe (4 intervenciones) el 30/03/2006 19:19:33
Hola entendi claro lo que hace pero tengo un pequeño proble en la parte donde pasamos los valores de la consulta en mi caso deberia aser asi

while not query1.Eof Do
with ExcelWorkSheet1.Cells Do Begin
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;
Item[Fila,1].value := Query1.FieldbyName('nombrecampos').Value;

pero al momento de ejecutarla me abre la hoja todo pero no me inserta los datos de la consulta ??

gracias me sirvio mucho lo anterior pero no entiendo como sacar los resultados de la consulta esta es la consulta.. que tengo
SELECT Distinct Transacciones_Validas.Num_Operacion, Transacciones_Validas.Fecha, Transacciones_Validas.Hora,Tipo_Operación.Descripción, Estacion.Nombre As Nombre_Estacion, Transacciones_Validas.Id_Pos , Transacciones_Validas.Num_Torniquete, Transacciones_Validas.Monto,Transacciones_Validas.Remanente, Arreglos.Nombre_Arreglo
FROM Transacciones_Validas, Tarjetas_Historico, Pos, Estacion,Tipo_Operación, Arreglos
WHERE Tarjetas_Historico.Num_Fisico = :T and Transacciones_Validas.Fecha >= :Fi and Transacciones_Validas.Id_Tarjeta = Tarjetas_Historico.Id_Tarjeta
and Transacciones_Validas.Id_Estacion = Estacion.Id_Estacion
and Transacciones_Validas.Id_Tpo_Operacion = Tipo_Operación.Id_Tpo_Operacion
and Transacciones_Validas.Id_Arreglo = Arreglos.Id_Arreglo ;

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Exportar a excel No me resulta..

Publicado por Ariel (61 intervenciones) el 30/03/2006 19:39:42
Hola Luis

mira para exportar datos a excel lo hago de esta forma, me gusta mas q la otra
puesto a que puedes copiar macros de excel y pegarlas en delphi
obviamente como excel es de vb debes pasarlo a delphi
por ejemplo los parentesis nombre("nombre")="hola" --> nombre['nombre']:='hola';

en los agrega ComObj.

Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, "ComObj"

Procedure TFrm.ExportaExcel;
Var
ExcelApp:OleVariant;
f,c:integer;
rango:string;
Begin

{Iniciar Excel}
try
ExcelApp:=GetActiveOleObject('Excel.Application');
except
try
ExcelApp:=CreateOleObject('Excel.Application');
except
Screen.Cursor:=crDefault;
MessageDlg('No puede Iniciar Excel / Excel no Instalado',mterror,[mbOK],0);
exit;
end;
end;

ExcelApp.WorkBooks.Add(xlWBATWorksheet);
ExcelApp.ActiveSheet.Name := 'Informe';
ExcelApp.Visible:=true;

ExcelApp.Range['B1'].Formula := self.Caption;
ExcelApp.Range['B1'].Font.Bold:=true;
ExcelApp.Range['B1'].Font.size:=12;

ExcelApp.Range['I4'].Formula :=formatdatetime('dd-mm-yyyy',date);
ExcelApp.Range['I5'].Formula :=formatdatetime('hh:mm',time);
ExcelApp.Range['I4'].HorizontalAlignment := xlCenter;
ExcelApp.Range['I5'].HorizontalAlignment := xlCenter;

//------ aqui se insertan los datos ----
f:=0;
While not (ADOQuery1.Eof) do
begin
Inc(F);
for c:=0 to (ADOQuery1.Fields.Count-1) do
begin
rango:=chr(c+97)+''+ IntToStr(f+6);
ExcelApp.Range[rango].FormulaR1C1 := ADOQuery1.Fields[c].asVariant;

end;
End;

ExcelApp:=UnAssigned;

End;

Espero te sirva.

Saludos.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Exportar a excel

Publicado por gagevv (18 intervenciones) el 29/10/2008 17:46:09
Excelente solución y muy simple (claro cuando alguien ya te lo da hecho), gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Exportar a excel

Publicado por Germán Ulloa (1 intervención) el 31/03/2006 20:54:29
procedure TForm1.BexelClick(Sender: TObject);
begin
Tabla.First;
Aexcel(Tabla);
end;
//******************************************************
procedure Aexcel(TBL:Tdataset);
var
V, sheet:Variant;
i,j :Integer;
begin
V:=CreateOleObject('Excel.Application');
V.Visible := True;

V.Workbooks.Add(xlWBatWorkSheet);
V.Workbooks[1].WorkSheets[1].Name := TBL.name;

Sheet := v.Workbooks[1].WorkSheets[TBL.name];

For j:=0 to TBL.Fieldcount-1 do Sheet.Cells[2, j+1]:=TBL.Fields[j].FieldName;

For i:=(0) to TBL.Recordcount-1 do
begin
For j:=0 to TBL.Fieldcount-1 do
begin
IF TBL.Fields[j].DataType = ftDateTime THEN
Sheet.Cells[i+3, j+1]:=TBL.Fields[j].Asdatetime
else
Sheet.Cells[i+3, j+1]:=TBL.Fields[j].Asstring;
end;
TBL.next;
end;
if not VarIsEmpty(V) then V.Quit;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Exportar a excel el error es el siguiente

Publicado por Luis Felipe (4 intervenciones) el 03/04/2006 15:43:40
Hola amigos gracias por toda la ayuda brindad, lo que pasa es lo siguiente:

Al pasar valores númericos a la planila excel los pasa correctamente, preo al intentar pasar valores de texto ejemplo un nombre o algo que sea de tipo string y en excel de tipo texto se cae y me da el siguiente error acess violation address 0046352f in module 'Sistema_EFE.Exe, read of address 00000108

bueno ese es el error no entiendo por que he tratado de hacer lo imposible y no me resulta sacar ese error

porfavor ayuda me urge mucho poder sacar este error!!!!

Gracias por las respuestas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Exportar a excel el error es el siguiente

Publicado por enrike (1 intervención) el 06/07/2011 17:43:19
hola amigo ya lo intentaste de esta forma:

query.FieldValues['nombre_campo'];
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar