Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Servers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2003
Anabel Anabel is offline
Miembro
 
Registrado: may 2003
Ubicación: D.F. México
Posts: 63
Poder: 22
Anabel Va por buen camino
Hola

quizas el siguiente ejemplo te pueda ayudar, es utililizando el componente TExcelAplication, del palette Servers.

Receta:

Ingredientes en delphi:
1)TForm of course
2)TQuery
3)SaveDialog
5)TExcelapplication
6)bitButton
7)dbGrid


procedure TForm1.bbtnExportToExcelClick(Sender: TObject);
var
LineNumber, LCID : Integer;
LineString : string;
begin
with SaveDialog1 do
begin
FileName :='';
Filter:= 'Excel files|*.XLS;All Files|*.*';
DefaultExt := 'XLS';
Title := 'Exporting to Excel';
if execute then
begin
query1.Open;
LCID := GetUserDefaultLCID;
with ExcelApplication1 do
begin
connect;
try
visible[LCID] := true;
Workbooks.Add(EmptyParam,LCID);

//Paso 1
Range['A1','J1'].Value := VarArrayOf(['Order No',
'Cust No','Sale Date','Emp No',
'Ship Via', 'Terms','Items Total',
'Tax Rate','Freight','Amount Paid']);

//Paso2 Se definen formato de celdas (alineacion de texto, margenes, fuente, etc.)
with Range['A1','J1']do
begin
HorizontalAlignment := xlcenter;
VerticalAlignment := xlBottom;
Wraptext := false;
Orientation := 0;
ShrinkTofit := false;
MergeCells := false;
Font.Bold := true;
end;

Query1.First;
LineNumber := 1;

//Paso 3, comenzamos a enviar datos a Excel
While not query1.Eof do
begin
Inc(lineNumber);
LineString := IntToStr(LineNumber);
Range['A'+LineString, 'J'+LineString].Value :=
VarArrayof([Query1OrderNo.value, Query1CustNo.Value,

//Paso 4
FormatDateTime('d-mmm-yy',Query1SaleDate.Value),
Query1EmpNo.Value, Query1ShipVIA.Value,
Query1Terms.Value, Query1ItemsTotal.Value,
Query1TaxRate.Value, Query1Freight.Value,
Query1AmountPaid.Value]);
Query1.Next;
end;

//Paso 5
Range['H2','G'+LineString].NumberFormat := '0.00%';
Range['G2','G'+LineString].NumberFormat := '$#,##0.00';
Range['I2','I'+LineString].NumberFormat := '$#,##0.00';
Range['J2','J'+LineString].NumberFormat := '$#,##0.00';
Range['A1','J'+LineString].AutoFormat(xlRangeAutoFormatlist1, true,
true,true,true,true,true);
Range['A1','J'+LineString].Columns.AutoFit;

ActiveWorkbook.SaveAs(FileName,xlNormal, '', '', false, false,
xlNochange,xlUserResolution,False,EmptyParam,EmptyParam,
LCID);
Quit;
finally
disconnect;
end; //try
end; //with Excelapplication1
end; //if execute
end; //with Savedialog1

end;


Tip adiconal

Range("A1").Select
ActiveCell.FormulaR1C1 = "Order No"

Es equivalente en Delphi a:


Range['A1','A1'].select;
ActiveCell.FormulaR1Ci := 'Order No';

Siempre es mejor utilizar arreglos para insertar en Excel datos por renglon, que celda por celda

Range['A1','J1'].Value := VarArrayOf(['Order No',
'Cust No','Sale Date','Emp No',
'Ship Via', 'Terms','Items Total',
'Tax Rate','Freight','Amount Paid']);

Saludos!!

Pd. Espero te sirva de algo
__________________
Ana
Responder Con Cita
  #2  
Antiguo 26-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Anabel
Siempre es mejor utilizar arreglos para insertar en Excel datos por renglon, que celda por celda
¡Excelente! No conocía esta posibilidad.

// Saludos
Responder Con Cita
  #3  
Antiguo 26-03-2004
Anabel Anabel is offline
Miembro
 
Registrado: may 2003
Ubicación: D.F. México
Posts: 63
Poder: 22
Anabel Va por buen camino
Thumbs up

Hola

Para enviar información a una plantilla ya creada de Excel, utiliza la sugerencia que te da delphi.com.ar

"Uses
... Excel97, ComObj...;
...
Var
Excel : Variant;
Archivo : String;
...
//***** Creamos el Objeto Ole *****//
try
Excel := CreateOleObject('Excel.Application');
except
Excel.Quit;
showmessage('No se pudo crear el Objecto Excel.');
raise;
end;

//***** Asignamos el archivo a abrir *****//
Archivo := 'c:\Hola.xls'
Excel.Workbooks.Open(Archivo);
..."

Si observas, para el ejemplo anterior es necesario que ya exista el fichero y en el posiblemente una plantilla en la cual deseas caiga la información.

Cómo enviar la información?

ExcelWorkSheet1.Workbooks.Open(Archivo);

ExcelWorkSheet1.Range['A1','K90'].Font.Size := 8;
ExcelWorkSheet1.Range['A1','K90'].Font.Bold := False;
ExcelWorkSheet1.Range['A1','K90'].Font.Name := 'Arial';

ExcelWorkSheet1.Cells[3,3].Font.Bold:=true;
ExcelWorkSheet1.Cells[3,3].Font.Size := 10;
ExcelWorkSheet1.Cells[3,3].Font.Underline := 2;
ExcelWorkSheet1.Cells[3,3].Value := 'Análisis de Presupuesto';
ExcelWorkSheet1.Cells[7,6].Value := 'Tipo de Proyecto:';
ExcelWorkSheet1.Cells[7,6].Range['C13','I13'].Value := VarArrayOf(['Clave','Elemento','Sección','Cantidad','Longitud','Precio','Importe']);

Primero especificas el número de hoja, después el 'Range[]' o 'Cells[]', en el ejemplo de arriba vienen algunas líneas también para dar formato a las celdas que quiza no utilices porque tu plantilla ya existe, pero no esta de mas saberlas.

Espero te ayude an algo lo anterior

Saludos
Belén

Nota: Alguien podría decirme como le hacen para citar lo que otro integrante comento. Gracias!!
__________________
Ana
Responder Con Cita
  #4  
Antiguo 27-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Tambioén puedn crear un nuevo libro a partir de una plantilla .xlt así:

Código:
var
  Libro: _WORKBOOK;
  Hoja: _WORKSHEET;

begin
  Libro := Excel.Workbooks.Add('Plantilla.xlt', 0);
  Hoja  := Libro.Sheets[1] as _WORKSHEET;
end;
Recuerden que las plantillas (archivos .xlt) normalmente no son para llenar sino para crear libros a partir de ellas. Los nuevos libros heredan el formato y/o datos que ya contenga la plantilla.

// Saludos
Responder Con Cita
  #5  
Antiguo 27-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Anabel
Nota: Alguien podría decirme como le hacen para citar lo que otro integrante comento. Gracias!!
¿Algo como esto?

Al momento de contestar el mensaje en lugar de oprimir "Responder" oprime "Citar" o usa directamente la etiqueta quote, por ejemplo, la cita de arriba se pone con:

[ QUOTE=Anabel ]Nota: Alguien podría decirme como le hacen para citar lo que otro integrante comento. Gracias!![ /QUOTE ]

sin los espacios al interior de [].

// Saludos
Responder Con Cita
  #6  
Antiguo 30-12-2004
SEBAC_28 SEBAC_28 is offline
Registrado
 
Registrado: dic 2004
Posts: 5
Poder: 0
SEBAC_28 Va por buen camino
[quote=Anabel]Hola

quizas el siguiente ejemplo te pueda ayudar, es utililizando el componente TExcelAplication, del palette Servers.

Receta:

Ingredientes en delphi:
1)TForm of course
2)TQuery
3)SaveDialog
5)TExcelapplication
6)bitButton
7)dbGrid


procedure TForm1.bbtnExportToExcelClick(Sender: TObject);
var
LineNumber, LCID : Integer;
LineString : string;
begin
with SaveDialog1 do
begin
FileName :='';
Filter:= 'Excel files|*.XLS;All Files|*.*';
DefaultExt := 'XLS';
Title := 'Exporting to Excel';
if execute then
begin
query1.Open;

Estoy teniendo algunos problemitas con lo anterior :
1- porque no declaran las variables: FileName ,Filter,DefaultExt,Title¿seran que son pertenecientes al objeto SaveDialog1?
2- ¿Me tengo que crear en el form los objetos descritos desde 2 a 7 inclusive? de los citados al principio
3- de ser asi lo ejecuto y en la linea query1.Open; se produce una excepcion con el mensaje Query1: No SQL statement available ¿como lo puedo solucionar?
Si alguien me puede dar una mano muy agradecido
Seba
Responder Con Cita
  #7  
Antiguo 07-09-2006
JuanPa1 JuanPa1 is offline
Miembro
 
Registrado: may 2006
Posts: 66
Poder: 19
JuanPa1 Va por buen camino
Hola Anabel, estoy tratando de exportar un reporte desde delphi a excel y estoy utilizando el codigo que tu expones en el foro, lo que quiero saber es a que corresponde el Query1OrderNo.Value que esta en la siguiente linea y como lo obtengo:
Range['A'+LineString, 'B'+LineString].Value[oleVar] := VarArrayof([Query1OrderNo.value, Query1CustNo.Value]);

Gracias por tu ayuda..
Saludos,
Juan Pablo
Responder Con Cita
  #8  
Antiguo 07-09-2006
JuanPa1 JuanPa1 is offline
Miembro
 
Registrado: may 2006
Posts: 66
Poder: 19
JuanPa1 Va por buen camino
Hola, ya la resolvi esa parte y ahora quisiera que por favor me expliques el paso 5, antes quiero decirte que yo solo quiero pasarle 2 campos a excel pues la tabla de la base de datos a la cual hago referencia en el Query tiene 2 campos.
//Paso 5
Range['H2','G'+LineString].NumberFormat := '0.00%';
Range['G2','G'+LineString].NumberFormat := '$#,##0.00';
Range['I2','I'+LineString].NumberFormat := '$#,##0.00';
Range['J2','J'+LineString].NumberFormat := '$#,##0.00';
Range['A1','J'+LineString].AutoFormat(xlRangeAutoFormatlist1, true,
true,true,true,true,true);
Range['A1','J'+LineString].Columns.AutoFit;
ActiveWorkbook.SaveAs(FileName,xlNormal, '', '', false, false,
xlNochange,xlUserResolution,False,EmptyParam,EmptyParam,
LCID);

Espero tu pronta respuesta, gracias.
Saludos,
Juan Pablo.
Responder Con Cita
  #9  
Antiguo 08-09-2006
Anabel Anabel is offline
Miembro
 
Registrado: may 2003
Ubicación: D.F. México
Posts: 63
Poder: 22
Anabel Va por buen camino
Smile

Hola Juan Pablo!

Perdón pero no entiendo cula es la duda que tienes, pordrías ser más especifico.

En las líneas que escribe unicamente se le stá dando formato alas celdas, formato de número.
En ese paso también se da explica el comando para salvar la hoja en la que se está trabajando en excel.

Saludos
Belén
__________________
Ana
Responder Con Cita
  #10  
Antiguo 11-09-2006
JuanPa1 JuanPa1 is offline
Miembro
 
Registrado: may 2006
Posts: 66
Poder: 19
JuanPa1 Va por buen camino
Gracias Belen por tu respuesta, ya entendi lo que hace el paso 5.
Ahora tengo un problema en esta linea:
ActiveWorkbook.SaveAs(FileName,xlNormal, '', '', false, false,xlNochange,xlUserResolution,False,EmptyParam,EmptyParam,LCID);

La aplicacion no me ejecuta y me sale este error:
Not enough actual parameters

Espero me sepas dar una idea de lo que puede estar pasando, gracias.
Saludos,
Juan Pablo.
Responder Con Cita
  #11  
Antiguo 11-09-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Juan
Not enough actual parameters
Ese error indica que no se están proporcionando todos los parámetros necesarios (en este caso al método "SaveAs"). Ignoro ahora mismo si además puede tratarse de que se estén proporcionando parámetros demás, e incluso de que los parámetros no sean correctos, pero, creo que esto último se indica de otra manera, con otro mensaje de error, quiero decir.

Edito: efectivamente, se trata de lo primero que digo: se están proporcionando menos parámetros de los necesarios. De la ayuda de Delphi:

Cita:
Empezado por Ayuda de Delphi - Error Messages and Warings

Not enough actual parameters

This error message occurs when a call to procedure or function gives less parameters than specified in the procedure or function declaration.

This can also occur for calls to standard procedures or functions.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 11-09-2006 a las 17:47:36.
Responder Con Cita
  #12  
Antiguo 11-09-2006
JuanPa1 JuanPa1 is offline
Miembro
 
Registrado: may 2006
Posts: 66
Poder: 19
JuanPa1 Va por buen camino
Gracias por tus respuestas, me han ayudado a resolver los problemas que tenia.
Responder Con Cita
  #13  
Antiguo 13-09-2006
JuanPa1 JuanPa1 is offline
Miembro
 
Registrado: may 2006
Posts: 66
Poder: 19
JuanPa1 Va por buen camino
Hola me podrias ayudar por favor con lo siguiente:
Quiero pasar el resultado de una expresion TQRExpr de delphi a excel:
La expresion es esta:
Sum(if(ADOReportLogin.Answer_Code = 1, ADOReportLogin.Total, 0)).
Como le asigno el resultado de esta expresion a una celda de excel??
Gracias por las sugerencias a mi pregunta..
Saludos,
Juan Pablo.
Responder Con Cita
  #14  
Antiguo 11-06-2007
konnyx2500 konnyx2500 is offline
Registrado
 
Registrado: jun 2007
Posts: 1
Poder: 0
konnyx2500 Va por buen camino
Error "not enough actual parameters"

Hola! Alguien sabe como puedo arreglar esto?
Bueno les cuento tengo problemas con el ExcelXP.pas, hace un tiempo he estado compilando una aplicación y nunca tuve problemas con esto, pero hoy cambié una query y la exportacion de datos a excel me falló, he estado leyendo que este error es porque tengo menos parametros que los que necesita la funcion, y aunque ya lo cambié, tendría que cambiar todas las llamadas a esta función desde toda la aplicación... mi pregunta es, por qué esto cambió?? antes tenía estas mismas llamadas con menos parámetros y nunca me tiró ningun error. me da la impresión de que es la versión del ExcelXP, alguien sabe como puedo volver a una versión anterior??

Muchos saludos
Responder Con Cita
  #15  
Antiguo 27-02-2009
Avatar de mikzero
mikzero mikzero is offline
Registrado
 
Registrado: feb 2009
Posts: 3
Poder: 0
mikzero Va por buen camino
Cita:
Empezado por Anabel Ver Mensaje

//Paso 1
Range['A1','J1'].Value := VarArrayOf(['Order No',
'Cust No','Sale Date','Emp No',
'Ship Via', 'Terms','Items Total',
'Tax Rate','Freight','Amount Paid']);
Estoy usando DELPHI 2007 y me marca error aki cada vez ke compilo me marca EXPECTEC '[' ya cheke si no me faltaba cerrar o abrir algun corchete, parentesis o punto y coma

estoy tratando de hacer una aplicacion para de un IBOquery1 mandar la informacion a un archivo de EXCEL, me podrian ayudar por favor.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:56:26.


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
Copyright 1996-2007 Club Delphi