Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-03-2009
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Caso curioso exportando a excel desde una rejilla.

Afortunadamente lo acabo de resolver, pero os cuento lo que me ha estado pasando.

Con este código exporto facturas de una rejilla a excel, sin problemas.
Código Delphi [-]
procedure TfrConFacturas.spExcelClick(Sender: TObject);
var
  excel:Variant;
  fila,columna:Integer;
  nCols:Integer;
  Data : TDataSet;
  MyDataSet:TDataSet;
  i:Integer;
begin
  try
    excel:=CreateOleObject('Excel.Application');
  except
    ShowMessage('Excel no se pudo iniciar.');
    exit;
  end;
  excel.Visible:=true;

  Data:=DbgFacturas.DataSource.DataSet;
  Data.First;
  fila:=1;
  columna:=0;
  excel.Workbooks.Add;
  nCols:= DbgFacturas.Columns.Count;
     //Poner los títulos
     for Columna:=0 to nCols - 1 do
     begin
     Excel.Cells[fila,columna + 1].Value:=DbgFacturas.Columns[Columna].Title.Caption;
     end;

    Fila:=Fila + 1;

   //Desengachar controles para agilizar


   try
     while not(Data.eof) do
     begin

       for columna := 0 to DbgFacturas.Columns.Count-1 do
       begin
        if columna = 0 then
        begin
        Excel.Cells[fila,columna + 1].Value:=Data.FieldByName(DbgFacturas.Columns[Columna].FieldName).AsString;
        end;

        if columna = 1 then
        Excel.Cells[fila,columna + 1].Value:=Data.FieldByName(DbgFacturas.Columns[Columna].FieldName).AsDateTime;

        if (columna > 3) and (columna < 8) then
        begin
        Excel.Cells[fila,columna + 1].Value:=Data.FieldByName(DbgFacturas.Columns[Columna].FieldName).AsFloat;
        excel.Cells[fila,columna + 1].Style:= 'Comma';
        end
        else
        Excel.Cells[fila,columna + 1].Value:=Data.FieldByName(DbgFacturas.Columns[Columna].FieldName).AsString;
       end;

     Data.Next;
     fila:= fila + 1;
     end;
      //Ajustar columnas
        for columna:=1 to ncols do
        begin
        Excel.Columns[Columna].EntireColumn.AutoFit;
        end;

   Except
   ShowMessage('Atención, se produjo un error en la transmisión.');
   end;
   
end;

Ocurre que la primera columna es el número de las facturas y tiene el siguiente formato:
04-1800
El 04 indica el año y el resto del número es el número de la factura.

Pues sucede que me funcionaba correctamente hasta que observe que ciertas facturas en vez de el número aparecía una fecha con un formato personalizado.

Después de muchas vueltas me dí cuenta que esto sucedía a partir de la factura 2000

es decir 04-2000 y no con la 04-1999

Llegué a la conclusión de que las anteriores funcionaban por los efectos de ser menores de 2000 y a partir de este número excel interpretaba el formato como fecha.

Probé añadiéndole a la factura según se la pasaba a excel una 'F' por delante pues nada seguía igual.

Al final se me ocurrio entrar a Excel crear una macro de formato, entrar luego en dicha macro y ver que utilizaba para asegurarse el formato de texto y gracias a esto lo resolví, pongo la solución por si a alguien le ocurriera lo mismo.

Código Delphi [-]

procedure TfrConFacturas.spExcelClick(Sender: TObject);
var
  excel:Variant;
  fila,columna:Integer;
  nCols:Integer;
  Data : TDataSet;
  MyDataSet:TDataSet;
  i:Integer;
begin
  try
    excel:=CreateOleObject('Excel.Application');
  except
    ShowMessage('Excel no se pudo iniciar.');
    exit;
  end;
  excel.Visible:=true;

  Data:=DbgFacturas.DataSource.DataSet;
  Data.First;
  fila:=1;
  columna:=0;
  excel.Workbooks.Add;
  nCols:= DbgFacturas.Columns.Count;
     //Poner los títulos
     for Columna:=0 to nCols - 1 do
     begin
     Excel.Cells[fila,columna + 1].Value:=DbgFacturas.Columns[Columna].Title.Caption;
     end;

    Fila:=Fila + 1;

   //Desengachar controles para agilizar


   try
     while not(Data.eof) do
     begin

       for columna := 0 to DbgFacturas.Columns.Count-1 do
       begin
        if columna = 0 then
        begin
        Excel.Cells[fila,columna + 1].Value:=Data.FieldByName(DbgFacturas.Columns[Columna].FieldName).AsString;
        excel.Cells[fila,columna + 1].NumberFormat:='@';
        end;

        if columna = 1 then
        Excel.Cells[fila,columna + 1].Value:=Data.FieldByName(DbgFacturas.Columns[Columna].FieldName).AsDateTime;

        if (columna > 3) and (columna < 8) then
        begin
        Excel.Cells[fila,columna + 1].Value:=Data.FieldByName(DbgFacturas.Columns[Columna].FieldName).AsFloat;
        excel.Cells[fila,columna + 1].Style:= 'Comma';
        end
        else
        Excel.Cells[fila,columna + 1].Value:=Data.FieldByName(DbgFacturas.Columns[Columna].FieldName).AsString;
       end;

     Data.Next;
     fila:= fila + 1;
     end;
      //Ajustar columnas
        for columna:=1 to ncols do
        begin
        Excel.Columns[Columna].EntireColumn.AutoFit;
        end;

   Except
   ShowMessage('Atención, se produjo un error en la transmisión.');
   end;

   
end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 01-03-2009 a las 15:43:13.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Exportando a Excel celdas con Formato ruedabeat2003 Varios 2 12-08-2008 23:46:21
Recomendación Exportando datos de una DB MaMu Varios 3 04-05-2008 21:33:29
Exportando a Excel con DBGridExcelExport BlueSteel Varios 5 07-02-2008 18:11:30
Ajuste de líneas exportando a Excel Alexis7788 Varios 0 11-12-2007 10:57:38
Exportando a PDF Perenquen Impresión 2 25-09-2003 13:00:06


La franja horaria es GMT +2. Ahora son las 08:14:25.


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
Copyright 1996-2007 Club Delphi