Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   exportar a excel (https://www.clubdelphi.com/foros/showthread.php?t=59616)

rakka 02-09-2008 17:21:18

exportar a excel
 
necesito ayuda para exportar mis datos de un DBgrid a una hoja de excel, ya se que tengo que usar la busqueda y ya la use, pero vienen muchos componentes, codigo y esas cosas que no entiendo ni J, si viene el componente lo instale, y a usar codigo, pero, donde lo uso? donde lo pego o como?? :confused:

vaya que soy un noob :P

ContraVeneno 02-09-2008 17:37:51

¿en que ejemplo te basaste?
¿que has intentado hacer?
en base a esas preguntas, te ayudo

rakka 02-09-2008 17:52:21

hola!
mira encontre este http://www.clubdelphi.com/trucos/ind...229&scrollb=84
creo que quiere hacer lo mismo que yo, pero lo hace sin instalar componentes ni nada, pero solo da un codigo :P

que no se donde ponerlo, pegarlo, ejecutarlo, nada!

donde lo pego? en un componente? cual? y despues como lo ejecuto?

disculpen las molestias :(

Jose Roman 02-09-2008 18:02:11

Como primera parte, supongo que estas utilizando un DataSet, asi que primero debe colocar en uses ComObj y Excel97 o Excel2000 o ExcelXp, depende del delphi en mi caso es delphi 7, dentro del procedure debes declarar una variable una variable para la aplicacion de Excel, una para el Libro y otra para la Hoja asi:
Código Delphi [-]procedure TqrListAcuN.Excel(Titulo: String);

var
ApXls : Variant;
Libro : Variant;
Hoja : Variant;
Fi : Integer;


De ahi en adelante debes utilizar las funciones del excel, te envio el codigo completo para que te sirva de ejemplo, cualquier cosa me avisas
Código Delphi [-]procedure TqrListAcuN.Excel(Titulo: String);
var
ApXls : Variant;
Libro : Variant;
Hoja : Variant;
Fi : Integer;
begin
try
ApXls := CreateOleObject('Excel.Application');
try
Screen.Cursor := crHourGlass;
ApXls.Visible := False;
ApXls.SheetsInNewWorkbook := 1;
Libro := ApXls.WorkBooks.Add;
Hoja := Libro.WorkSheets[1];
Fi := 1;
qDatos.Open;
Hoja.Cells[Fi,1].Font.Bold := True;
Hoja.Cells[Fi,1] := CambiaEn(qDatosNOMBRE.Value,'@',' ');
qDatos.Close;
Hoja.Range['A'+IntToStr(Fi),'F'+IntToStr(Fi)].Select;
ApXls.Selection.Merge;
ApXls.Selection.HorizontalAlignment := xlCenter;
Inc(Fi,2);
Hoja.Cells[Fi,1] := Titulo;
Hoja.Cells[Fi,1].Font.Bold := True;
Hoja.Range['A'+IntToStr(Fi),'F'+IntToStr(Fi)].Select;
ApXls.Selection.Merge;
ApXls.Selection.HorizontalAlignment := xlCenter;
Inc(Fi,3);
qAcuNc.Open;
while not qAcuNc.Eof do
begin
Inc(Fi);
Hoja.Cells[Fi,1] := 'CODIGO';
Hoja.Cells[Fi,1].Select;
ApXls.Selection.Font.Bold := True;
ApXls.Selection.HorizontalAlignment := xlRight;
Hoja.Cells[Fi,2].Select;
ApXls.Selection.NumberFormat := '@';
ApXls.Selection.HorizontalAlignment := xlLeft;
Hoja.Cells[Fi,2] := qAcuNcCODIGO.Value;
Hoja.Cells[Fi,3] := 'NOMBRE';
Hoja.Cells[Fi,3].Select;
ApXls.Selection.Font.Bold := True;
ApXls.Selection.HorizontalAlignment := xlRight;
Hoja.Range['D'+IntToStr(Fi),'F'+IntToStr(Fi)].Select;
ApXls.Selection.NumberFormat := '@';
ApXls.Selection.HorizontalAlignment := xlLeft;
ApXls.Selection.Merge;
ApXls.Selection.Font.Size := 9;
Hoja.Cells[Fi,4] := qAcuNcNOMBRE.Value;
Inc(Fi,2);
Hoja.Range['A'+IntToStr(Fi),'F'+IntToStr(Fi)].Select;
ApXls.Selection.Font.Bold := True;
Hoja.Cells[Fi,1] := 'FACTURA';
Hoja.Cells[Fi,1].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,2] := 'VALOR';
Hoja.Cells[Fi,2].HorizontalAlignment := xlRight;
Hoja.Cells[Fi,3] := 'FECHA';
Hoja.Cells[Fi,3].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,4] := 'NOTA CR';
Hoja.Cells[Fi,4].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,5] := 'VALOR';
Hoja.Cells[Fi,5].HorizontalAlignment := xlRight;
Hoja.Cells[Fi,6] := 'FECHA';
Hoja.Cells[Fi,6].HorizontalAlignment := xlCenter;
Inc(Fi);
Hoja.Cells[Fi,1].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,2].HorizontalAlignment := xlRight;
Hoja.Cells[Fi,2].NumberFormat := '#.##0';
Hoja.Cells[Fi,3].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,3].NumberFormat := 'dd.mmm.yyy';
Hoja.Cells[Fi,4].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,5].HorizontalAlignment := xlRight;
Hoja.Cells[Fi,5].NumberFormat := '#.##0';
Hoja.Cells[Fi,6].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,6].NumberFormat := 'dd.mmm.yyy';
Hoja.Cells[Fi,1] := qAcuNcFACTU.Value;
Hoja.Cells[Fi,2] := qAcuNcVR_FAC.Value;
Hoja.Cells[Fi,3] := qAcuNcFECHAF.Value;
Hoja.Cells[Fi,4] := qAcuNcNUME.Value;
Hoja.Cells[Fi,5] := qAcuNcVALOR.Value;
Hoja.Cells[Fi,6] := qAcuNcFECHAN.Value;
qRcMes.Open;
If not qRcMes.IsEmpty then
begin
Inc(Fi);
Hoja.Range['C'+IntToStr(Fi),'F'+IntToStr(Fi)].Select;
ApXls.Selection.Font.Bold := True;
Hoja.Cells[Fi,3] := 'RECIBO';
Hoja.Cells[Fi,3].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,4] := 'CONSIG';
Hoja.Cells[Fi,4].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,5] := 'VALOR';
Hoja.Cells[Fi,5].HorizontalAlignment := xlRight;
Hoja.Cells[Fi,6] := 'FECHA';
Hoja.Cells[Fi,6].HorizontalAlignment := xlCenter;
Inc(Fi);
end;
while not qRcMes.Eof do
begin
Hoja.Cells[Fi,3] := qRcMesID_REC.Value;
Hoja.Cells[Fi,3].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,4] := qRcMesCONSIG.Value;
Hoja.Cells[Fi,4].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,5] := qRcMesVR_REC.Value;
Hoja.Cells[Fi,5].HorizontalAlignment := xlRight;
Hoja.Cells[Fi,5].NumberFormat := '#.##0';
Hoja.Cells[Fi,6] := qRcMesFECHA.Value;
Hoja.Cells[Fi,6].HorizontalAlignment := xlCenter;
Hoja.Cells[Fi,6].NumberFormat := 'dd.mmm.yyy';
Inc(Fi);
qRcMes.Next;
end;
qRcMes.Close;
Inc(Fi,2);
qAcuNc.Next;
end;
qAcuNc.Close;
finally
Screen.Cursor := crDefault;
try Hoja.Cells.Columns.AutoFit; except end;
Hoja.Columns['B'].ColumnWidth := Hoja.Columns['B'].ColumnWidth + 2;
Hoja.Columns['E'].ColumnWidth := Hoja.Columns['E'].ColumnWidth + 2;
Hoja.Columns['C'].ColumnWidth := Hoja.Columns['C'].ColumnWidth + 2;
Hoja.Columns['F'].ColumnWidth := Hoja.Columns['F'].ColumnWidth + 2;
ApXls.Visible := True;
end;
except
SM.MessageDlg('Excel no se encuentra instalado en este equipo, no se puede exportar',mtError,[mbOk],0);

end;

rakka 02-09-2008 18:07:25

Cita:

Empezado por Jose Roman (Mensaje 311129)
Como primera parte, supongo que estas utilizando un DataSet, asi que primero debe colocar en uses ComObj y Excel97 o Excel2000 o ExcelXp, depende del delphi en mi caso es delphi 7,

gracias Jose Roman, pero el punto es que no se a que te refieres con DataSet, uses ComObj y Excel97 o Excel2000 o ExcelXp, tambien uso delphi 7 y office 2003, :p

ContraVeneno 02-09-2008 18:10:07

Cita:

Empezado por rakka (Mensaje 311126)
¿donde lo pego? ¿en un componente? ¿cual? y despues ¿como lo ejecuto?

disculpen las molestias :(

¿dónde? lo pegas al inicio de tu código, después del "uses". Y no se le olvide la declaración.
¿componente? no necesita componentes...

¿cómo?
donde quieras, supongo que tendrás un botón para guardar el archivo. En el evento OnClick de ese botón, solo pones:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 ExportarExcel( TuDataset, 'C:\NombreArchivo.XLS');
End;

Caro 02-09-2008 18:13:44

Hola rakka, DataSet es el query o table que estas usando el que enlazas a tu DataSource, donde te dice debes añadir la unidad ComObj en uses, fijate al principio de tu unidad, ahí es donde debes añadir, ya que se esta haciendo la exportación por OLE.

Aquí tienes otro ejemplo utilizando los componentes de la paleta server. Revisa estos dos hilos http://www.clubdelphi.com/foros/showthread.php?t=59245 http://www.clubdelphi.com/foros/showthread.php?t=57651

Saluditos

Jose Roman 02-09-2008 18:17:27

Dataset es el que se comunica con la base de datos, ¿Que utilizas para comunicarte con ella? un TTable o TQuery, en los referente al uses es lo que aparece al principio del unit y los escribes, asi:
Código Delphi [-]t uListAcuN;

interface

uses Windows, SysUtils, Messages, Classes, Graphics, Controls,
StdCtrls, ExtCtrls, Forms, QuickRpt, QRCtrls, IniFiles, DateUtils, DB,
ADODB, bsSkinPrinter, ImpMatrix, ComObj, Excel2000, Dialogs,
bsMessages;


Esto es solo codigo, no necesita de componentes, lo puedes colocar en un evento Onclick de un TButton

rakka 02-09-2008 18:22:09

agradezco muchisimo a todos la ayuda, pero sigo igual no entiendo ni jota... no se del "uses" ni donde esta mi codigo ni nada nadita, estoy bien tronco para esto, :(
revise http://www.clubdelphi.com/foros/showthread.php?t=57651
que trabaja con los componentes pero no se donde poner el codigo, de plano paciencia conmigo :(

gracias!

maeyanes 02-09-2008 18:41:28

Hola...

rakka, ¿tienes al menos idea de lo que es el Object Pascal, la Programación Orientada a Objetos, el uso del IDE de Delphi?

¿Por qué te pregunto esto? Por que según lo que das a entender en tus respuestas es que no sabes nada de nada sobre el IDE y el lenguaje con el que estás intentando programar.

Te recomendaría que antes de seguir con tu proyecto, al menos buscaras algún tutorial de Delphi Básico, en Google podrás encontrar muchos...


Saludos...

Caro 02-09-2008 21:25:14

Cita:

Empezado por rakka (Mensaje 311138)
agradezco muchisimo a todos la ayuda, pero sigo igual no entiendo ni jota... no se del "uses" ni donde esta mi codigo ni nada nadita, estoy bien tronco para esto, :(
revise http://www.clubdelphi.com/foros/showthread.php?t=57651
que trabaja con los componentes pero no se donde poner el codigo, de plano paciencia conmigo :(
gracias!

Hola rakka, sobre ese hilo, solo debes colocar los componentes de la paleta server en tu formulario ExcelApplication, ExcelWorkBook, WorkSheet y el codigo que esta ahí colocas dentro de un boton (Button) digamos, si te fijas ahí se estan exportando dos querys, tu solo debes exportar uno, donde ves IBQuery1, lo reemplazas por el query o table que estes usando, y el nombre de los campos también debes colocar con los que tengas en tu tabla, ya que se esta usando campo1, campo2.

Saluditos

HOUDEL 03-09-2008 00:37:14

Gracias...
 
Hola, jose roman

Gracias por el codigo, jejeje me llego de maravillas .. pero aun tengo una duda que espero puedan responderme.. como destruyo un libro de exel por si hay algun error al momento de insertar los datos??

Saludos :)

ContraVeneno 03-09-2008 00:53:31

Código Delphi [-]
  
 ExcelApp.Visible:=true;
 //ExcelApp.Quit;
 ExcelApp := Unassigned;


La franja horaria es GMT +2. Ahora son las 02:02:17.

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