Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Agregar datos en una hoja de excel donde la fila inicial puede variar (https://www.clubdelphi.com/foros/showthread.php?t=59245)

JoAnCa 18-08-2008 22:07:02

Agregar datos en una hoja de excel donde la fila inicial puede variar
 
Hola a todos
Despues de buscar en el foro sobre exportacion de datos a excel, no encontre nada que me sirva para lo que busco.

El caso es que quiero exportar para excel los datos de una tabla, que se diferencian por un campo boolean.
En excel serian dos tablas en la misma hoja, los verdaderos primero y mas abajo los falsos.

Para exportar los datos a excel tendria que comenzar a insertar los verdaderos a partir de la fila 3 (que es donde comienza la tabla), pero los falsos tengo que insertarlos a partir de 6 filas mas abajo de donde terminan los verdaderos (estas 6 filas corresponden al encabezado de la segunda tabla)

El problema está en como determinar donde comenzar a insertar los datos de la segunda tabla.
Hay alguna función que me devuelva el numero de la fila donde esta un dato determinado?
O de que forma puedo hacerlo?

Caro 19-08-2008 14:33:29

Hola Jose Caceres, no dices como estas exportando a excel, digamos que estas utilizando los componentes de la paleta Server, ExcelApplication, un ExcelWorkBook y un WorkSheet.

En tu consulta lo ordenas por campo Bolean que dices, cosa que salga primero todos los verdaderos y luego todos los falsos. En el codigo puedes utilizar una banderita para incrementar el numero de filas cuando llegues a los falsos.

Código Delphi [-]
var
 Fila : Integer;
 banderita : Boolean;
begin
 Fila := 3; //Para comenzar en la fila 3
 ExcelApplication1.Connect;
 ExcelApplication1.Visible[0] := True;
 ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
 ExcelWorksheet1.ConnectTo(ExcelApplication1.Sheets[1] as _WorkSheet);
 
 banderita := False; //Inicializamos nuestra banderita
 Query1.First;
 While Not Query1.Eof do
  begin
   With ExcelWorksheet1.Cells do
    begin
     //Si hemos llegado a los Falsos, incrementamos nuestra fila 
     if (Query1.FieldByName('campo').AsBoolean = False) and (Not banderita) then
      begin
       Fila := Fila+6;
       banderita := True;
      end;
     Item[Fila,1].Value := Query1.FieldByName('campo1').AsString;
     Item[Fila,2].Value := Query1.FieldByName('campo2').AsString;
     Item[Fila,3].Value := Query1.FieldByName('campo3').AsString;
     Inc(Fila);
     Query1.Next;
    end;
  end;//While
 
  ExcelWorksheet1.Disconnect;
  ExcelWorkbook1.Disconnect;
  ExcelApplication1.Disconnect;

Saluditos

JoAnCa 19-08-2008 21:53:52

Gracias Caro, parece que con ese codigo voy a solucionar mi pregunta
Pero yo estaba usando la exportacion por OLE, porque no domino muy bien los componentes de la paleta servers, aunque se que es mas facil y mas eficiente.
Voy a hacerlo con la paleta servers como me dices, pero hay un detalle.
Segun el codigo parece que lo que abre es una hoja en blanco, pero a donde voy a exportar es a una hoja que ya esta creada, es decir, es como exportar para una plantilla en excel.
Lo que quiero saber es como abrir el documento de excel donde escribire los datos, donde es que va el nombre del libro de excel?

Es en esta linea

Código Delphi [-]
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));

En lugar de EmptyParam puedo poner una cadena con el nombre y ruta del archivo xls?

Caro 20-08-2008 00:59:55

Hola de nuevo Jose Caseres, para añadir sobre un archivo existe tendrías que utilizar la función Open. Justamente en vez de la linea de codigo que me indicas, colocas esta otra:

Código Delphi [-]
 FileName := 'c:\documentos\archivo.xls';
 .........
 ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open(FileName,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,0));

Saluditos

JoAnCa 21-08-2008 16:17:18

Y sigo para aprender a usar Excel con Delphi
 
Muchas gracias Caro por tu ayuda :D

Ahora lo que necesito saber es:
- Como insertar una fila
- Como cambiarme de hoja
(Esto lo hago así, donde # es el número de la hoja, pero tal vez sea de otra forma mejor o mas eficiente)

Código Delphi [-]
  ExcelSheet.ConnectTo(ExcelApp.Sheets[#] as _WorkSheet);
  ExcelSheet.Activate;
- Como "Guardar como...", Para que cuando llene los datos, no se me modifique la plantilla

En el foro he encontrado algo sobre insertar fila, pero todo es mediante OLE (CreateOLEObject), no por los componentes, y no me sirve, o al menos no se usarlo combinado con los componentes.

Disculpa tantas preguntas, pero es que es la primera vez que trabajo con la paleta Servers y con excel

Por cierto, tendras algun manual o ayuda sobre estos componentes para trabajar con Excel?

PD:
En estos dias tuve dificultad para entrar al foro, El sitio tenia problemas o seria mi conexion? :confused:

JoAnCa 21-08-2008 16:30:42

Hola de nuevo
Caro
Para abrir el libro puse lo que me dijiste y me da el error 60, Not enough actual parameters

Código Delphi [-]
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open(FileName,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,0));

Que parametro faltaria por poner? :rolleyes:

Caro 21-08-2008 18:32:35

Hola de nuevo Jose

Para añadir una fila:

Código Delphi [-]
 //Te añadira una nueva fila en la fila 10
 ExcelWorksheet1.Range['A10','A10'].EntireRow.Insert(xlShiftDown);

Para cambiarte de hoja o sheet, tienes que conectarte nuevamente de la forma que indicas, cambiando el numero de hoja.

Saluditos

Caro 21-08-2008 18:37:13

Cita:

Empezado por Jose Caceres (Mensaje 308563)
Que parametro faltaria por poner? :rolleyes:

Con esa cantidad de parametros no me da error, cuenta cuantos parametros tiene tu Open. Y segun a ello añades o disminuyes EmptyParam, yo no he utilizado esos parametros es por ello que le paso EmptyParam.

Saluditos

JoAnCa 21-08-2008 20:56:38

Cita:

Empezado por Caro (Mensaje 308611)
... cuenta cuantos parametros tiene tu Open. Y segun a ello añades o disminuyes EmptyParam

Me faltaban dos parametros, se los puse y todo salio bien
Muchas gracias por tu ayuda, ya me funciona la exportacion a excel como yo queria, todo bien

Y con respecto a algun manual o ayuda sobre los componentes de la Paleta Servers (Especificamente Excel), sabes de alguno

Saludos ;)

Caro 22-08-2008 15:07:42

Cita:

Empezado por Jose Caceres (Mensaje 308651)
Y con respecto a algun manual o ayuda sobre los componentes de la Paleta Servers (Especificamente Excel), sabes de alguno

Nose de ninguno Jose, las pocas cosas que he hecho sobre esta paleta, ha sido probando algunas de funciones, propiedades que tienen sus componentes.

Saluditos


La franja horaria es GMT +2. Ahora son las 17:07:46.

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