Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Crear otra hoja en excel igual a la anterior (https://www.clubdelphi.com/foros/showthread.php?t=33002)

Novás 23-06-2006 13:14:18

Crear otra hoja en excel igual a la anterior
 
Hola a todos XD:

Mi problema es el siguiente; para acceder a un libro de excel hago lo siguiente:
Código Delphi [-]
var
  Excel, Libro: Variant;
  i: integer;
begin
  Excel:=CreateOleObject('Excel.Application');
  Excel.Visible := False;
  Excel.DisplayAlerts:= False;
  Excel.WorkBooks.Add('plantilla.xlt');
  Excel.WorkBooks[1].WorkSheets[1].Name := 'Productos';
  Libro := Excel.WorkBooks[1].WorkSheets['Productos'];

El archivo de la plantilla tiene una sola hoja y yo necesito crear, a partir de esa hoja, un numero indeterminado de copias iguales.

¿Como hago por favor? no encuentro nada en el foro

Neftali [Germán.Estévez] 23-06-2006 13:49:07

Para crear una hoja nueva en la plantilla a partir de la que hay puedes usar éste código:

Código Delphi [-]
uses
  Activex, ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  excel : olevariant;
begin
  // Crear el objeto 
  excel := CreateOLEObject('Excel.Application');
  // Acceder a la plantilla
  excel.workbooks.open('c:\temp\plantilla.xlt');
  // Seleccionar la hoja
  excel.sheets[1].select;
  // Copiar la hoja seleccionada
  excel.sheets[1].copy(EmptyParam, excel.sheets[1]);
  // desactivar alertas para que no avise de que vas a guardar sobre la misma plantilla
  Excel.DisplayAlerts := False;
  // Guardar en el mismo XLT
  excel.activeWorkBook.SaveAS('C:\Temp\plantilla.xlt');
  // Cerrar
  excel.workbooks.Close;
  // liberar
  Excel := Unassigned;
end;

Funciona perfectamente con Excel 2003; Espero que no tengas problemas con versiones anteriores.

Novás 24-06-2006 20:43:02

Muchas gracias, funciona perfectamente, ahora la duda que me quedas es como puedo poner en primer plano, por ejemplo, la hoja numero 5, ya que aunque puedo insertar datos en esa hoja, yo quiero que el cliente se quede con el libro abierto ante el en la hoja que le corresponda a cada momento.

Muchas gracias de nuevo

Novás 25-06-2006 14:30:27

He probado el codigo para copiar las hojas, me ha funcionado durante 20 minutos, ahora cuando ejecuto
Código Delphi [-]
while not CUsuarios.Eof do
begin
   excel.sheets[1].select;
   excel.sheets['PLANTILLA'].copy(EmptyParam, excel.sheets[1]);
   CUsuarios.Next;
end;

Me pone que el servidor lanzó una excepción.

A que se puede deber, el error lo da justo en la lína

Código Delphi [-]
   excel.sheets['PLANTILLA'].copy(EmptyParam, excel.sheets[1]);

Neftali [Germán.Estévez] 26-06-2006 09:24:02

Cita:

Empezado por Novás
Me pone que el servidor lanzó una excepción.

Estaría bien saber cual es la excepción que te ha "lanzado".

Novás 26-06-2006 12:13:34

Es que no sabría deciros, el mensaje exacto que me pone es ese:

El servidor lanzó una excepción.

cuburu 23-07-2006 01:49:48

De forma inmediata se me ocurre que el problema no es tanto de el manejo de excel, por lo que veo estas haciendo una llamada a una tabla que contiene un apuntador y vas agregando una nueva hoja por cada registro de dicha tabla. ¿No sería mejor realizar un conteo del total de registros que tienes y en base a ello hacer el ciclo para agregar las hojas que necesites?

Lo que tienes en tú código:

Código Delphi [-]
while not CUsuarios.Eof do
begin
   excel.sheets[1].select;
   excel.sheets['PLANTILLA'].copy(EmptyParam, excel.sheets[1]);
   CUsuarios.Next;
end;

Podrías intentar con algo como esto:

Código Delphi [-]
var
  NoUsers, Cont: Integer;
begin
  NoUsers := CUsuarios.Count;  {Revisa esta parte de la sintaxis pues no la recuerdo bien}
  for Cont := 1 to NoUsers do
  begin
   excel.sheets[1].select;
     excel.sheets['PLANTILLA'].copy(EmptyParam, excel.sheets[1]);
  end;
end;

Espero te sirva esta idea, suerte.


La franja horaria es GMT +2. Ahora son las 10:52:42.

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