PDA

Ver la Versión Completa : Como se crea un fichero XLS desde Delphi y paleta Servers


Combat-F2D
22-05-2003, 01:00:39
Me gustaría saber si existe posiblidad de generar directamente mediante codigo Delphi un fichero XLS de Excel

delphi.com.ar
22-05-2003, 01:13:22
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 (http://www.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.

FRANKER
22-05-2003, 08:56:14
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...


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);
...

Una vez creado el Excel Solamente te queda acceder a sus Celdas...


Excel.Cells[1,1].Value;


Y para terminar es muy importante que cierres el Excel, pues sino se quedará en memoria...


//***** IMPORTANTÍSIMO *****//
Excel.quit


espero servirte de ayuda.

Saludos y Suerte!!!

Combat-F2D
22-05-2003, 11:06:28
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

Anabel
05-06-2003, 16:53:12
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 :)

Combat-F2D
06-06-2003, 00:38:18
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

JamesBond_Mx
26-03-2004, 16:48:32
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?

JamesBond_Mx
26-03-2004, 17:28:47
Y en que momento estas declarando Range??? no lo veo?? o como lo declaras???

roman
26-03-2004, 17:53:23
Siempre es mejor utilizar arreglos para insertar en Excel datos por renglon, que celda por celda


¡Excelente! No conocía esta posibilidad.

// Saludos

Anabel
26-03-2004, 23:59:56
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!!

roman
27-03-2004, 02:37:40
Tambioén puedn crear un nuevo libro a partir de una plantilla .xlt así:


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

roman
27-03-2004, 02:41:28
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

atirado
27-03-2004, 19:43:26
Veo que ya se ha tratado el cómo crear un NUEVO archivo hacia Excel, sin embargo, lo que yo necesito es hacer una comparación de un archivo XLS vs. un archivo DBF.
Para ello necesito leer, obviamente, ambos, por lo que mi pregunta sería ¿cómo traer datos de excel hacia Delphi?
Agradezco de antemano su ayuda :p

roman
28-03-2004, 22:51:44
Para ello necesito leer, obviamente, ambos, por lo que mi pregunta sería ¿cómo traer datos de excel hacia Delphi?


Esto ya también se ha tratado. Una opción es usar ADO. En este hilo (http://www.clubdelphi.com/foros/showthread.php?t=2696) puedes encontrar una manera de leer datos de Excel con ADO.

// Saludos

atirado
29-03-2004, 17:15:20
Hola, Román! Muchas gracias por el tip! lo intentaré y te comento si es que me funciona :D

Sinceramente no había encontrado nada sobre el tema la primera vez que busqué, por lo que creo que tendré qué aprender a buscar mejor :(
Espero me tengan paciencia porque soy nuevo en esto de Delphi, jejeje :p

Un saludo desde México a tod@s :cool:

atirado
29-03-2004, 18:06:45
Hola de nuevo, Román! Desafortunadamente, no me funcionó asi como lo mencionaste a Darkside :( , pues me envia un mensaje que no se puede conectar porque XLS no es un formato de base de datos correcto.
Si sabes algo de eso, agradeceré tu ayuda nuevamente.

Un saludo enorme :D
Alejandro

sitrico
26-04-2004, 17:50:05
Bueno, no se si seguir el hilo pero con todo lo aqui dicho me parecio correcto continuar aqui. mi pregunta es:

¿ como incluyo formulas en las hojas excel creadas por este método ?

logré incluir una formula poniendo un campo String con el contenido

t.FieldByName(Cmp[ni]).AsString := '=H##-G##';
t.FieldByName(Cmp[nj]).AsString := '=H##*F##';

Pero ¿Como se usan las funciones de Excel?

=Suma() -> =Sum() este funciona con SUM
=SI()
= Entero()

JamesBond_Mx
26-04-2004, 19:44:42
Pues mira, lo que yo hago es, crear primero la plantilla en Excel, la cual contendra, ya un formato predeterminado de fuentes, bordes, colores etc. y si deseo incluir alguna formula, en la misma plantilla la coloco donde desee que se aplique esta formula, al pasar los datos, en lugar de crear el archivo, llamo a la platilla y ahí vacio mis datos, y como caen a un formato predeterminado, todo es respetado, tanto formatos de texto, bordes etc. y las formulas funcionan muy bien.

Me expliqué???

sitrico
26-04-2004, 21:04:34
En este caso no me sirve lo de la plantilla, ya que la hoja es bastante compleja (una demostración de los calculos de un programa complejo según exigencias de la Ley) por eso estoy obligado a incluir las funciones de Excel, Ya logré usar fórmulas simples y la función SUMA que se usa por ej.

'=SUM(A1:A15)'
ó
'=RAND()' ----> Aleatorio

Noten que es SUM y no SUMA ahora si trato de usar la funcion =SI()

'=IF(B5-B6<0;B5-B6;0)'

Me da un "Ole error 800A03EC" y lo mismo me pasa con la funcion ROUND (Redondear).

He usado este código para hacer pruebas de sintaxis (en edit1.text) y no he podido encontrar el problema.


Function LaFormula(f:String):String;
Var
p : Integer;
Begin
While(pos('##',f) <> 0) do
Begin
p := pos('##',f);
Delete(f,p,2);
Insert(IntToStr(Row),f,p);
End;
Result := f;
End;

procedure TForm1.Button1Click(Sender: TObject);
Var
RangeE:Range;
i,Row: Integer;
Begin
For i := 0 to Query1.FieldCount-1 do
begin
RangeE.Value := Query1.Fields[i].DisplayLabel;
RangeE := RangeE.Next;
End;
Row := 2;
While not(Query1.Eof) do
Begin
RangeE := ExcelApplication1.Range['A'+IntToStr(Row),'A'+IntToStr(Row)];
For i := 0 to Query1.FieldCount-1 do
begin
RangeE.Value := Query1.Fields[i].AsString;
RangeE := RangeE.Next;
End;
RangeE.Value := LaFormula('=SUM(C##:E##)');
RangeE := RangeE.Next;
RangeE.Value := LaFormula(Edit1.Text);
Query1.Next;
Inc(Row);
End;
end;

candido
28-04-2004, 15:49:21
hola foro

mi intencion es importar una tabla a excel y con este ejemplo me va estupendamente, pero el problema esta cuando lo hago sin que se vea el excel, es decir con la opcion de visible a false, y lo cierro con un quit, que me pregunta si quiero grabar o no el libro excel, quisiera cerrar pero sin grabar, ya que lo uso para hacer un paso intermedio de combinar correspondencia con word,

muchas gracias y espero haberme explicado bien.

roman
28-04-2004, 17:04:09
me pregunta si quiero grabar o no el libro excel, quisiera cerrar pero sin grabar

Intenta con


ExcelApplication.DisplayAlerts[0] := false;


// Saludos

candido
30-04-2004, 10:28:39
muchas gracias Roman, pero esta opcion no me vale porque no uso el objeto de delphi ExcelApplication, si no que lo creo mas o menos asi

---------------------------

try
XL := GetActiveOleObject('Excel.Application');
//XL := GetActiveOleObject(DirBaseDatos + '\Plantillas\Etiquetas\etiquetas.xls');
except
XL := CreateOLEObject('Excel.Application'); // Ole object creation
//XL := CreateOLEObject(DirBaseDatos + '\Plantillas\Etiquetas\etiquetas.xls');
end;
//XL.WorkBooks.add;
if Ruta <> '' then
XL.WorkBooks.open(Ruta)
else
XL.WorkBooks.add;
//XL.visible:=true;
XL.visible:=False;

j := 1;
i := 0;
while i < NoCampos do
begin
XArr[i+1]:=EXQuery.Fields[i].DisplayLabel;
i := i+1;
EXQuery.Next;
end;
XL.Range['A'+IntToStr(j),
CHR(64+NoCampos)+IntToStr(j)].Value := XArr;

XL.Range['A1',CHR(64+NoCampos)+IntToStr(j)].select;
XL.Selection.Font.Name:='Times New Roman';
XL.Selection.Font.Size:=10;
XL.Selection.Font.color := clblue;
XL.Selection.Font.bold := true;
XL.Selection.Font.underline := true;


j := 3;
EXQuery.First;
while not EXQuery.Eof do
begin
i:=1;
while i<=NoCampos do
begin
XArr[i] := EXQuery.Fields[i-1].Value;
i := i+1;
end;
XL.Range['A'+IntToStr(j),
CHR(64+NoCampos)+IntToStr(j)].Value := XArr;
EXQuery.Next;
j := j + 1;
end;
XL.Range['A1',CHR(64+NoCampos)+IntToStr(j)].select;
XL.selection.Columns.AutoFit;
XL.Range['A1','A1'].select;
XL.Quit;


----------------------

pero al final me pide que si quiero grabar o no, y no se como decirle que me lo grabe directamente

un saludo

roman
30-04-2004, 17:17:11
pero esta opcion no me vale porque no uso el objeto de delphi ExcelApplication


Claro que te vale ya que el objeto TExcelApplication no es más que una encapsulación de la interfaz al objeto ole Excel que es la que describe qué métodos y propiedades tiene. Lo que cambia un poco es la forma de llamarlos. Aquí te pongo un ejemplo:


uses
ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
XL: OleVariant;

begin
XL := CreateOLEObject('Excel.Application');
XL.DisplayAlerts := false;
XL.WorkBooks.Add;
XL.Cells[1, 1] := 'Hola mundo';
XL.Quit;
end;


// Saludos

Salomon
03-05-2004, 09:50:25
muchas gracias Roman,

ya solo me faltaria, grabar el documento sin preguntar al usuario, ya que esta opcion no pregunta pero tampoco graba, y necesiteria grabar el documento.

de todos mudos muchas gracias.

SEBAC_28
30-12-2004, 07:36:25
[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

karla
24-07-2006, 19:33:49
hola:
Soy nueva en esto asi que no se como funcionan todo, pero bueno Yo estoy haciendo una aplicacion en la que introduzco datos a un documento en excel que tiene varias hojas, yo quisiera saber como moverme para otra hoja que no sea la primera.
Gracias chao

JuanPa1
07-09-2006, 16:50:19
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

JuanPa1
07-09-2006, 17:20:07
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.

Anabel
08-09-2006, 15:29:50
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

JuanPa1
11-09-2006, 17:32:40
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.

dec
11-09-2006, 17:45:33
Hola,


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:



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.

JuanPa1
11-09-2006, 18:29:50
Gracias por tus respuestas, me han ayudado a resolver los problemas que tenia.

ddd_ddd
12-09-2006, 20:47:58
Ya que se esta en este tema me gustaria saber si hay una manera de guardar el archivo .xls creado en la direccion que yo quiera y si se puede proteger la hoja, todo desde el codigo. Espero me puedan ayudar.:)

JuanPa1
13-09-2006, 00:21:05
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.

konnyx2500
11-06-2007, 23:23:55
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

mikzero
27-02-2009, 13:18:24
//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. :rolleyes:

santiago14
03-08-2023, 19:47:22
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 (http://www.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.


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.

Neftali [Germán.Estévez]
04-08-2023, 08:29:39
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?


Si te refieres a los componentes "Export Suite" de Federico Firence (https://www.clubdelphi.com/foros/member.php?u=11), con su permiso y tirando de WayBackMachine (http://web.archive.org), los he subido al FTP del ClubDelphi.

Los tienes aqui. (http://terawiki.clubdelphi.com/Delphi/Componentes-Funciones/__Export_Suite__/)

https://i.imgur.com/JzqfhA3.png

También he visto que en Torry Delphi Pages, todavía están disponibles (https://torry.net/db-aware-components/db-access/export-and-import/firesoft-exportsuite).