PDA

Ver la Versión Completa : Exportación de Qreports a excel


DanielAlexander
23-07-2003, 19:31:13
Hola Gente!!!!
necesito ayuda por favor.
Tengo escrito el siguiente codigo, tengo echo un corte de control
por codigo de farmacia para cuando cambie de codigo, me
genere una nueva hoja, con los datos de ese codigo de farmacia
lo que no se como hacer es como agregar una hoja a excel.
Gracias....



try
excel:=CreateOleObject('Excel.Application');
except
ShowMessage('Excel no se pudo iniciar.');
exit;
end;
excel.Visible:=true;
Data:=DBGRID1.DataSource.DataSet;
Data.First;
WorkBook:=Excel.WorkBooks.Add;


hoja:=1;
while not(Data.eof) do
begin
Sheet:=WorkBook.WorkSheets[hoja];
Sheet.Name:=inttostr(Data.FieldByName(DBGrid1.Columns[0].FieldName).asinteger);
Row:=1;
Sheet.Cells[Row,1]:='COD-FAR';
Sheet.Cells[Row,2]:='FARMACIA';
Sheet.Cells[Row,3]:='REMITO';
Sheet.Cells[Row,4]:='RECETA';
Sheet.Cells[Row,5]:='SECUENCIA';
Sheet.Cells[Row,6]:='PRODUCTO';
Sheet.Cells[Row,7]:='IMPORTEOSACEPTADO';
Sheet.Cells[Row,8]:='PERIODO';
Sheet.Cells[Row,9]:='LOCALIDAD';
Sheet.Cells[Row,10]:='IDRECETA';
Sheet.Cells[Row,11]:='NUMERODELINEA';
Sheet.Rows[Row].Font.Bold:=true;
Sheet.Cells[Row,1].font.color:=clred;
Sheet.Cells[Row,2].font.color:=clred;
Sheet.Cells[Row,3].font.color:=clred;
Sheet.Cells[Row,4].font.color:=clred;
Sheet.Cells[Row,5].font.color:=clred;
Sheet.Cells[Row,6].font.color:=clred;
Sheet.Cells[Row,7].font.color:=clred;
Sheet.Cells[Row,8].font.color:=clred;
Sheet.Cells[Row,9].font.color:=clred;
Sheet.Cells[Row,10].font.color:=clred;
Sheet.Cells[Row,11].font.color:=clred;

codfar:=Data.FieldByName(DBGrid1.Columns[0].FieldName).asinteger;
fila:=2;
columna:=1;

while (not(Data.eof)) and (codfar = Data.FieldByName(DBGrid1.Columns[0].FieldName).asinteger) do

begin
for columna := 0 to dbgrid1.Columns.Count-1 do
begin
excel.Cells[fila,columna + 1].Value:=Data.FieldByName (DBGrid1.Columns[columna].FieldName).asString;
end;
Data.Next;
fila:= fila + 1;
end;
hoja:=hoja + 1;
fila:=2;
columna:=1;
end;

//excel.Cells[fila,1].Value:='=SUM(a1:a3)'
Sheet.Cells.Columns.AutoFit;

cadetill
23-07-2003, 20:03:47
en mi web tienes una ejemplo de pasar un Dataset a Excel con los servers. El ejemplo lo tienes en el apartado del RxDbGrid

Espero te sirva

DanielAlexander
23-07-2003, 20:48:14
El ejemplo esta barbaro pero lo que no encuentro es como moverme de hoja en el libro de excel, si tenes alguna idea de como hacerlo eternamente agradecido

cadetill
23-07-2003, 21:44:05
Bueno, por defecto, un libro de Excel se crea con 3 hojas. Por lo que al crearlo, suponemos eso y, con la sentencia siguiente, accedemos a la hoja deseada del libro (solo hay que cambiar el numero en Sheets[x])

ExcelWorkSheet1.ConnectTo( ExcelApplication1.Sheets[1] as _WorkSheet);

Si necesitas mas hojas, o bien defines dentro de Excel que al crear un libro este tenga mas hojas por defecto (una chapuza :P) o te miras como funciona bien el metodo Add de Sheets (como no hay ayuda ni los .pas, no me lo he podido mirar demasiado, pero seguramente en Google encontraras algunas respuestas

ExcelApplication1.Sheets.Add();

Espero te sirva

DanielAlexander
24-07-2003, 18:36:45
Hola cadetti!!!!!
Muchas gracias por la ayuda, pero todavia no logro hacer que funcione.
Los ejemplos que me pasaste son con los componentes de excel de Delphi y yo no estoy utilizando ningun componente por eso algunas sintaxis no me funcionan, por ejemplo para agregar una hoja al libro escribo:

Excel.Sheets.Add();

y lo hace bien lo que no logro hacer funcionar es hacer que se active esa hoja


la primera ves que agrega lo hace por defecto pero a partir de la segunda me agrega la hoja pero sigue quedando activa la primera hoja que me agrego..

Si tenes alguna idea de como hacerlo, te agradezco mujmcho.

Gracias....

cadetill
24-07-2003, 20:22:31
a ver, que no termino de entender.

te refieres a que se active visualmente o que introduzca datos en ella?

Si es la primera,... lo siento, pero ni idea
Si es la segunda, te remito a mi mensaje anterior donde decia

ExcelWorkSheet1.ConnectTo( ExcelApplication1.Sheets[x] as _WorkSheet);


y donde "x" es la pagina donde quieres que escriba datos

DanielAlexander
25-07-2003, 00:13:52
No lo que te quiero decir es que no estoy utilizando los componentes ExcelWorkShet, ExcelWorkbook que estan en la paleta servers de Delphi, el ejemplo que me pasaste no me funciona porque se esta refiriendo a esos componentes
yo estoy utilizando la forma mas antigua directamente escribiendo
el codigo que te genera excel, igualmente voy a utilizar los componentes con los ejemplos que me pasaste porque no le encuentro la vuelta para que me escriba en la hoja que yo le diga
con el ejemplo que me baje de tu pagina y esto tiene que funcionar.


Muchas gracias ,.......

cadetill
25-07-2003, 16:12:50
Pues nada, siento no haberte entendido de primeras :o

Directamente no te sabria decir, lo poco que he hecho con Excel ha sido con los Servers. No es que me termine de gustar su comportamiento pero....

Suerte compañero ;)

DanielAlexander
25-07-2003, 17:59:49
Hola compañero..Te cuento que con los componentes funciono perfecto, el unico problemita que me muestra solamente la cabecera del excel cuando me genera el archivo, lo pujedo ver solamente si primero abro el excel y luego el archivo, supongo que debe ser la forma en que lo estamos abriendo o generando, tenes alguna idea de que peude estar pasando.

Salu2.....

cadetill
25-07-2003, 18:22:09
jejejejeje, creo que nuestra comunicacion necesita un arreglo, porque vuelvo a no entender muy bien lo que te pasa :D

A ver si me lo puedes explicar algo mejor ;)

PD: al igual es que estoy algo tocho ultimamente :p

DanielAlexander
26-07-2003, 00:00:08
Lo que me esta pasando es muy loco, lo que esta pasando es cuando presiono el boton de exportar a excel lo primero que hace es generarme el excel , crearme el libro, etc, y luego me llena los datos en las hojas correspondientes.... el tema es que cuando genera el excel, o mejor dicho cuando esta cargando los datos en las respectivas hojas yo lo deberia ver porque teoricamente primero me abrio el excel, el tema que me lo habre veo la barra de herramientas de excel pero no me muestra el libro. lo termina de procesar pero no veo si lo hizo bien o no, entonces tengo que abrir el excel por otro lado y abrir el archivo para verlo completo.
si quiero abrir directamente el archivo me muestra la barra de herramientas solamente y abajo veo el fondo de windows..



Espero que me hallas entendido y disculpame las molestias...

cadetill
26-07-2003, 11:29:39
bueno, creo que ahora si que te he entendido :)

Lo que pasa es que yo lo he probado y, veo sin problemas toda la generacion de la/las hojas del libro, me lo deja abierto viendo todos sus datos

Bufff, la verdad no se que te puede estar pasando. Lo unico que se me ocurre... o que te falta algun update de Delphi o la version del Office que sea diferente de la mia (yo tengo el XP)

DanielAlexander
28-07-2003, 13:31:19
Yo tengo el 2000 , igualmente muchas gracias por tu ayuda...