Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Servers
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 30/10/2003
Ester Ester is offline
Miembro
 
Join Date: Oct 2003
Posts: 13
Poder: 0
Ester Va por buen camino
salvar fichero excel

Muy buenas,

he empezado a trabajar con excel des de delphi y tengo un gran problema, no sé como crear un fichero excel.

He buscado en los foros y he descubierto como abrir y llenar un fichero ya creado, pero no consigo encontrar un ejemplo que lo genere des de cero.

He probado con los componentes de la paleta 'servers' y también con un objecto de tipo variant, pero no hay modo de que me grabe el .xls.

Alguien puede ayudarme?


Muchas grácias,

Ester
Reply With Quote
  #2  
Old 30/10/2003
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: 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
Yo creo un nuevo archivo con algo similar a esto:

Code:
var
  Libro : _WORKBOOK;
  Hoja  : _WORKSHEET;

begin
  Libro := Excel.Workbooks.Add(Plantilla, 0);
  Hoja  := Libro.Sheets[1] as _WORKSHEET;
donde 'Excel' es una componente de tipo TExcelApplication y 'Plantilla' es la ruta a una plantilla de Excel ya creada aunque puedes usar Null para crear un libro con la plantilla por defecto.

Luego,con

Excel.Visible[0] := true

muestras Excel o bien puedes usar el método SaveAs del objeto _WORKSHEET para guadar el archivo.

// Saludos
Reply With Quote
  #3  
Old 04/11/2003
ramiretor ramiretor is offline
Miembro
 
Join Date: May 2003
Location: México
Posts: 196
Poder: 24
ramiretor Va por buen camino
Hola:
Muy bien Roman, he hecho como tú dices pero ahora el método SaveAs de _woorkSheet me pide unos parámetros que no sé como se definen

Saludos

__________________
Ernesto R.
Reply With Quote
  #4  
Old 04/11/2003
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: 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
Prueba con

Code:
  Libro.SaveAs(
    NombreArchivo,
    Null,
    Null,
    Null,
    false,
    false,
    xlNoChange,
    xlUserResolution,
    false,
    Null,
    Null,
    0
  );
// Saludos
Reply With Quote
  #5  
Old 04/11/2003
Miguel Rodrigo Miguel Rodrigo is offline
Registrado
 
Join Date: Nov 2003
Location: Mexico D.F.
Posts: 5
Poder: 0
Miguel Rodrigo Va por buen camino
Thumbs up

Hola Ernesto

Debes revisar el código, lo que puede suceder es que estes tratando de guardar la hoja

Hoja.SaveAs( ......

Pero si no guardas primero el Libro, como te indico Roman, entonces te va a generar un EAccessViolation.


var
Libro : _WORKBOOK;
Hoja : _WORKSHEET;

begin
Libro := Excel.Workbooks.Add(NULL, 0);
Hoja := Libro.Sheets[1] as _WORKSHEET;
Libro.SaveAs(Nombre,
Null,
Null,
Null,
false,
false,
xlNoChange,
xlUserResolution,
false,
Null,
Null,
0
);


Reply With Quote
  #6  
Old 04/11/2003
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: 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
Quote:
Miguel Rodrigo comentó:
Pero si no guardas primero el Libro, como te indico Roman, entonces te va a generar un EAccessViolation.
En realidad debe funcionar con la hoja aunque con otro parámetros. Así lo probé primero y sí sirvió. Sólo que, aunque no lo he probado, pienso que si estamos manejando varias hojas en un mismo libro, el método SaveAs de la hoja guardará la hoja en otro libro nuevo. Por ello rectifiqué y puse el método del libro.

Habrá que probar...

... sólo que me da flojera con tantos parámetros

// Saludos
Reply With Quote
  #7  
Old 04/11/2003
ramiretor ramiretor is offline
Miembro
 
Join Date: May 2003
Location: México
Posts: 196
Poder: 24
ramiretor Va por buen camino
Hola:
He hecho todo como me han indicado y funciona de maravilla, pero si ahora quiero meter valores en las celdas de la hoja, en los ejemplos del foro viene de la siguiente manera:

Hoja.Cells[1,1].Value := variable;

pero no funciona porque los ejemplos del foro utilizan la expresión, para abrir excel:

CreateOleObject('Excel.Application');


alguien me puede ayudar?


saludos

__________________
Ernesto R.
Reply With Quote
  #8  
Old 04/11/2003
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: 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
Quote:
ramiretor comentó:
[...]en los ejemplos del foro viene de la siguiente manera:

Hoja.Cells[1,1].Value := variable;

pero no funciona porque los ejemplos del foro utilizan la expresión, para abrir excel:

CreateOleObject('Excel.Application');
No entiendo cuál es la relación entre cómo asignar valores a una celda y la forma en que creas el objeto ExcelApplication.

Ya sea que crees el objeto mediante CreateOleObject o utilizando una componente TExcelApplication (y la verdad no entiendo por qué se complican la vida utilizando CreateOleObject), el objeto tiene la propiedad WorkBooks a partir de la cual creas el nuevo libro y la nueva hoja.

// Saludos
Reply With Quote
  #9  
Old 04/11/2003
ramiretor ramiretor is offline
Miembro
 
Join Date: May 2003
Location: México
Posts: 196
Poder: 24
ramiretor Va por buen camino
Hola:
Ahora solo necesito saber como le hago para asignarle valor a una o varias celdas usando un objeto TExcelApplication, te agradeceré una ayuda en esa cuestion.

Saludos

__________________
Ernesto R.
Reply With Quote
  #10  
Old 04/11/2003
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: 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
Quote:
ramiretor comentó:
Hola:
Ahora solo necesito saber como le hago para asignarle valor a una o varias celdas usando un objeto TExcelApplication, te agradeceré una ayuda en esa cuestion.
Creo que estoy dejando de entender. ¿Qué problema hay con juntar lo de mi primer mensaje en este hilo:

Code:
var
  Libro : _WORKBOOK;
  Hoja  : _WORKSHEET;

begin
  Libro := Excel.Workbooks.Add(Plantilla, 0);
  Hoja  := Libro.Sheets[1] as _WORKSHEET;
con lo que tú mismo citas en tu penúltimo mensaje:

Code:
Hoja.Cells[1,1].Value := variable;
?

// Saludos
Reply With Quote
  #11  
Old 04/11/2003
ramiretor ramiretor is offline
Miembro
 
Join Date: May 2003
Location: México
Posts: 196
Poder: 24
ramiretor Va por buen camino
Ahora me contesto yo mismo, uso Delphi 7 por lo que no estoy muy seguro si para versiones anteriores de Delphi sea lo mismo.
Si se usa un objeto TExcelApplication para usar el Excel entonces,
para llenar el valor de la celda A1, se usa :

Excel.Cells.Items[1, 'A'] := Variable;



Gracias por todo, y por cierto el metodo SaveAs(.....) con todos los parámetros que amablemente me proporcionaron funciona si en el uses de la unidad se tiene declarada Excel2000, para versiones posteriores(por ejemplo Office XP) se agrega un penultimo parametro( que estoy investigando cual puede ser)

Saludos y un abrazo
__________________
Ernesto R.
Reply With Quote
  #12  
Old 24/03/2004
seb@'s Avatar
seb@ seb@ is offline
Miembro
 
Join Date: Aug 2003
Posts: 57
Poder: 24
seb@ Va por buen camino
Post Error al escribir el mismo codigo

Hola!!!
Estoy intentando hacer lo que estaban tratando, acerca de crear un archivo excel, pero esto no me funciona y me tira el error cuando quiero poner informacion en el archivo abierto:

[Error] xxxxxxxxxxx.pas(784): Class does not have a default property

cual es mi problema? de antemano gracias.

Código
Code:
var
	Hoja 	: _WORKSHEET;
	Libro : _WORKBOOK;
begin
	Excel.Connect;
	Libro := Excel.Workbooks.Add(NULL, 0);
	Hoja := Libro.Sheets[1] as _WORKSHEET;
        //Esta linea es la que me da ese error
        Hoja.Cells[1, 1].Value := 'hola';
	Excel.Visible[0] := true;
__________________
Sebastian Ibarrola
--------------------------
Reply With Quote
  #13  
Old 24/03/2004
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: 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
Intenta cambiar

Hoja.Cells[1, 1].Value := 'hola';

por

Hoja.Cells.Item[1, 1].Value := 'hola';

// Saludos
Reply With Quote
  #14  
Old 24/03/2004
niogon niogon is offline
Miembro
 
Join Date: Oct 2003
Posts: 25
Poder: 0
niogon Va por buen camino
Wink Puntual

Para ser sincero no he seguido mucho el hilo, pero creo entender que ocurre haci que te mando la linea como deveria ser

para los componentes office xp en delphi 7

{TExcelWorkBook} wkbExcel.SaveAs('c:\datos\uno.xls', Null, Null, Null, False, False, xlNoChange, xlUserResolution, False, Null, Null, 0, lcid);

para los componentes office 2000 en delphi 7

{TExcelWorkBook} wkbExcel.SaveAs('c:\datos\uno.xls, Null, Null, Null, False, False, xlNoChange, xlUserResolution, False, Null, Null, lcid);
Reply With Quote
  #15  
Old 05/11/2008
lKinGl lKinGl is offline
Miembro
 
Join Date: Aug 2007
Posts: 333
Poder: 20
lKinGl Va por buen camino
Salu2 quisiera saber si me pueden ayudar con mi código....

Código Delphi [-]
procedure TForm14.Button1Click(Sender: TObject);
var
  Libro : _WORKBOOK;
  Hoja  : _WORKSHEET;
  i:Integer;
begin
i:=0;
Libro := ExcelApplication1.Workbooks.Add(Null, 0);
Hoja  := Libro.Sheets[1] as _WORKSHEET;
  with Query1 do
    begin
    first;
      while not EOF Do
        begin
        i:=i+1;
        Hoja.Cells.Item[i,1]:=DBGrid1.Fields[0].AsString;
        Hoja.Cells.Item[i,2]:=DBGrid1.Fields[1].AsString;
        Hoja.Cells.Item[i,3]:=DBGrid1.Fields[2].AsString;
        Hoja.Cells.Item[i,4]:=DBGrid1.Fields[3].AsString;
        Hoja.Cells.Item[i,5]:=DBGrid1.Fields[4].AsString;
        Hoja.Cells.Item[i,6]:=DBGrid1.Fields[5].AsString;
        Hoja.Cells.Item[i,7]:=DBGrid1.Fields[6].AsString;
        Hoja.Cells.Item[i,8]:=DBGrid1.Fields[7].AsString;
        Hoja.Cells.Item[i,9]:=DBGrid1.Fields[8].AsString;
        Hoja.Cells.Item[i,10]:=DBGrid1.Fields[9].AsString;
        Next;
   end;//while
end;//with
end;

he desarrollado este código siguiendo este hilo, no da error pero no abre excel ni muestra lo que debe....

gracias adelantadas
__________________
Las cosas o son, o no son...
Reply With Quote
  #16  
Old 10/12/2008
nuk3zito's Avatar
nuk3zito nuk3zito is offline
Miembro
 
Join Date: Aug 2003
Location: "Z" Land
Posts: 244
Poder: 24
nuk3zito Va por buen camino
Quote:
Originally Posted by lKinGl View Post
Salu2 quisiera saber si me pueden ayudar con mi código....

Código Delphi [-]
procedure TForm14.Button1Click(Sender: TObject);
var
  Libro : _WORKBOOK;
  Hoja  : _WORKSHEET;
  i:Integer;
begin
i:=0;
Libro := ExcelApplication1.Workbooks.Add(Null, 0);
Hoja  := Libro.Sheets[1] as _WORKSHEET;
  with Query1 do
    begin
    first;
      while not EOF Do
        begin
        i:=i+1;
        Hoja.Cells.Item[i,1]:=DBGrid1.Fields[0].AsString;
        Hoja.Cells.Item[i,2]:=DBGrid1.Fields[1].AsString;
        Hoja.Cells.Item[i,3]:=DBGrid1.Fields[2].AsString;
        Hoja.Cells.Item[i,4]:=DBGrid1.Fields[3].AsString;
        Hoja.Cells.Item[i,5]:=DBGrid1.Fields[4].AsString;
        Hoja.Cells.Item[i,6]:=DBGrid1.Fields[5].AsString;
        Hoja.Cells.Item[i,7]:=DBGrid1.Fields[6].AsString;
        Hoja.Cells.Item[i,8]:=DBGrid1.Fields[7].AsString;
        Hoja.Cells.Item[i,9]:=DBGrid1.Fields[8].AsString;
        Hoja.Cells.Item[i,10]:=DBGrid1.Fields[9].AsString;
        Next;
   end;//while
end;//with
end;

he desarrollado este código siguiendo este hilo, no da error pero no abre excel ni muestra lo que debe....

gracias adelantadas
¿ya probaste con
Código Delphi [-]
ExcelApplication1.Visible[0] := true;
?

(En este hilo también se menciona)
__________________
Tiempo y ocasión acontecen a todos!
Reply With Quote
  #17  
Old 22/04/2009
fsolispa fsolispa is offline
Miembro
 
Join Date: Sep 2008
Posts: 28
Poder: 0
fsolispa Va por buen camino
Quote:
Originally Posted by nuk3zito View Post
¿ya probaste con

Código Delphi [-]
ExcelApplication1.Visible[0] := true;



?

(En este hilo también se menciona)
Una pregunta hay forma de poder poner información en una hoja ya existente, ya que en los ejemplos solo he visto para crear una nueva hoja pero no como insertar información en una ya existente alguien podria ayudarme
Reply With Quote
  #18  
Old 22/04/2009
nuk3zito's Avatar
nuk3zito nuk3zito is offline
Miembro
 
Join Date: Aug 2003
Location: "Z" Land
Posts: 244
Poder: 24
nuk3zito Va por buen camino
Quote:
Originally Posted by fsolispa View Post
Una pregunta hay forma de poder poner información en una hoja ya existente, ya que en los ejemplos solo he visto para crear una nueva hoja pero no como insertar información en una ya existente alguien podria ayudarme
Es algo así...

Código Delphi [-]
var
  Excel, Libro, xlSheet: Variant;

Código Delphi [-]
  try
     Excel := GetActiveOleObject('Excel.Application');
  except
     Excel := CreateOleObject('Excel.Application');
  end;

Código Delphi [-]
  if bGenerarArchivo then
     begin
        Libro:= Excel.WorkBooks.Add(xlWBATWorksheet);
        xlSheet:= Excel.WorkBooks[1].Sheets[1];
        xlSheet.Name:= sSheetName;
     end
  else
     begin
        Libro:= Excel.Workbooks.Open(sArchivo);
        xlSheet:= Libro.Worksheets.Item[sSheetName];
     end;

Donde bGenerarArchivo es una variable booleana que indica si el archivo se crea o se abre; sArchivo es una variable string con la ruta y nombre del archivo; y sSheetName es el nombre de la hoja a donde vas a escribir.

Toma en cuenta que este ejemplo es sin usar TExcelApplication (por eso puse el codigo con el que se crea el objeto), así que usándolo debe ser algo muy parecido.

Saludos.
__________________
Tiempo y ocasión acontecen a todos!

Last edited by nuk3zito : 22/04/2009 at 04:14.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 01:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi