FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#2
|
||||
|
||||
Si no querés que Delphi inicie Excel para generar un archivo, porque no sabés si en las máquinas donde vas a instalar tu aplicación tienen Excel o tienen otra versión, te recomiendo utilizar unos componentes que yo hice, los podes bajar de delphi.com.ar.
La ventaja de estos componentes es que no importa si el cliente tiene instalado Excel o su versión, y además son mucho mas veloces.
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
||||
|
||||
Cita:
Buenas. Resulta que tengo un problema con esto. Hay máquinas que no tienen excel instalado y necesito que se genere un archivo .xls. Y no puedo hacerlo. Encontré que en esta página había una herramienta que te permitía hacerlo sin tenerlo instalado. Pero ya no existe. ¿Dónde puedo encontrarlo ahora? Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer. |
#4
|
||||
|
||||
Cita:
Los tienes aqui. También he visto que en Torry Delphi Pages, todavía están disponibles.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Hola!
Te pongo un ejemplillo rápido de como accedo a excel. Como muy bien comenta delphi.com.ar, para que funcione correctamente tienes que tener instalado el Excel... Código:
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); ... Código:
Excel.Cells[1,1].Value; Código:
//***** IMPORTANTÍSIMO *****// Excel.quit Saludos y Suerte!!!
__________________
.:.::FRANKER::.:. |
#6
|
||||
|
||||
agradezco vuestra ayuda, pero todavía no me queda claro si puedo crea o generar el XLS desde cero, algo asi como:
Excel.aplication.createfile('C:\miFicheroExcel.xls'); // seguramente sea una burrada Gracias de nuevo
__________________
online |
#7
|
|||
|
|||
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 |
#8
|
||||
|
||||
Cita:
// Saludos |
#9
|
|||
|
|||
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 |
#10
|
||||
|
||||
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; // Saludos |
#11
|
||||
|
||||
Cita:
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 |
#12
|
|||
|
|||
[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 |
#13
|
|||
|
|||
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 |
#14
|
|||
|
|||
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. |
#15
|
|||
|
|||
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 |
#16
|
|||
|
|||
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. |
#17
|
|||
|
|||
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. |
#18
|
||||
|
||||
Cita:
estoy tratando de hacer una aplicacion para de un IBOquery1 mandar la informacion a un archivo de EXCEL, me podrian ayudar por favor. |
#19
|
||||
|
||||
la verdad es que habia solucionado el problema con un componente que pille por internet, en torry.net, creo, que admas pasa a texto delimitado, dbf o algo asi;
no obstante siempre fui poco partidario se usar componentes ajenos a los standar de la paleta ( a excepcion de RX claro) con un poco de tiempo probaré de muy buena gana ese magnifico codigo. por supuesto, muchas gracias ana
__________________
online |
#20
|
||||
|
||||
Este ejemplo esta muy interesante y completo, pero para crear un nuevo archivo de excel, pero ahora supongamos yo tengo ya una plantilla que se llama Plantilla.XLT, y ahi es donde yo quiero depositar mis datos, ¿como le indico que abra la plantilla para que trabaje con ella?
__________________
http://www.imgsharing.com/uploads/1121174648007_A1.jpg |
|
|
|