Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   exportar/importa a excel (https://www.clubdelphi.com/foros/showthread.php?t=75192)

martonbarbosa 03-08-2011 19:18:32

exportar/importa a excel
 
Hola gente buenas!!!

Tengo un problema que me vuelve loco!
Estoy haciendo un programa para cargar clientes y exportarlos a excel, pero tambien puedo importalos.

El problema es el siguiente:

Cuando exporta una planilla que contiene fechas, yo en excel la veo bien, pero cuando importo esa planilla a mi StringGrid veo la fecha como numeros!

Digamos en excel veo: 01/08/2011 y en el stringgrid veo: 40551
la verdad me vuelve loco... todo mi programa anda bien menos eso...

paso a dejar los codigos de cada accion!

Abrir una planilla de excel:
Código Delphi [-]
procedure TTrabajos.BitBtn3Click(Sender: TObject);
var
  i, r, x, lin : Integer;
  si: String;
  Hoja: _WorkSheet;
  buttonSelected : Integer;
begin
if BitBtn3.Caption = 'Abrir' then
 begin
  PlaySound('open', hInstance, SND_RESOURCE or SND_ASYNC);
  BitBtn3.Kind := bkCancel;
  BitBtn3.Caption := 'Cerrar';
  DecimalSeparator:='.';
  Excel.Workbooks.Open( ExtractFilePath( Application.ExeName ) + 'Data\Trabajos.xls',
  EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
  EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
  EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0 );
  Hoja := Excel.Worksheets.Item[1] as _WorkSheet;
  i := 2;
  si := IntToStr( i );
  r := 1;
  StringGrid1.Row := StringGrid1.Rowcount - 1;
  repeat
   with StringGrid1 do
    begin
     Cells[0,r] := Hoja.Range['A'+si,'A'+si].Value2;
     Cells[1,r] := Hoja.Range['B'+si,'B'+si].Value2;
     Cells[2,r] := Hoja.Range['C'+si,'C'+si].Value2;
     Cells[3,r] := Hoja.Range['D'+si,'D'+si].Value2;
     r := r + 1;
     RowCount := StringGrid1.RowCount + 1;
    end;
   Inc( i );
   si := IntToStr( i );
  until ( VarType( Excel.Range['A'+si,'A'+si].Value2 ) = VarEmpty );
   Excel.Workbooks.Close( 0 );
   With Combobox1.Items do
   Begin
    for x := 1 to StringGrid1.RowCount -1 do
     begin
      Add(StringGrid1.Cells[0,x]);
     end;
   end;
 end
else
 begin
  PlaySound('close', hInstance, SND_RESOURCE or SND_ASYNC);
  buttonSelected := MessageDlg('Desea Guardar los datos?',mtInformation , [mbYes,mbCancel], 0);
  if buttonSelected = mrYes then
   begin
    BitBtn2.Click;
    BitBtn3.Kind := bkOK;
    BitBtn3.Caption := 'Abrir';
    Combobox1.Clear;
    for lin := 1 to StringGrid1.RowCount -1 do
     StringGrid1.Rows[lin].Clear;
     Stringgrid1.RowCount := 2;
   end
  else
   begin
    BitBtn3.Kind := bkOk;
    BitBtn3.Caption := 'Abrir';
    Combobox1.Clear;
    For lin := 1 to StringGrid1.RowCount -1 do
     stringGrid1.Rows[lin].clear;
     StringGrid1.RowCount := 2;
  end;
 end;
end;

Procedimiento para guardar la planilla!
Código Delphi [-]
procedure TTrabajos.BitBtn2Click(Sender: TObject);
var
 Hoja: _WorkSheet;
 i, r : Integer;
 si, format : String;
begin
PlaySound('start', hInstance, SND_RESOURCE or SND_ASYNC);
// Abrimos excel
Excel.Connect;
// Creamos un nuevo libro con tres hojas (predeterminado)
Excel.Workbooks.Add( NULL, 0 );
// Apuntamos a la primera hoja y le cambiamos el nombre
 Hoja := Excel.Worksheets.Item[1] as _WorkSheet;
 Hoja.Name := 'Clientes';
// Nombre Columnas
 Hoja.Range['A1','A1'].Value2 := StringGrid1.Cells[0,0];
 Hoja.Range['A1','A1'].ColumnWidth := 14;
 Hoja.Range['B1','B1'].Value2 := StringGrid1.Cells[1,0];
 //Hoja.Range['B1','B1'].ColumnWidth := 70;
 Hoja.Range['C1','C1'].Value2 := StringGrid1.Cells[2,0];
 Hoja.Range['C1','C1'].ColumnWidth := 14;
 Hoja.Range['D1','D1'].Value2 := StringGrid1.Cells[3,0];
 Hoja.Range['D1','D1'].ColumnWidth := 14;
 // Datos
 i := 2;
 si := IntToStr( i );
 r := 1;
 Repeat
   Hoja.Range['A'+si,'A'+si].Value2 := StringGrid1.Cells[0,r];
   Hoja.Range['B'+si,'B'+si].Value2 := StringGrid1.Cells[1,r];
   Hoja.Range['C'+si,'C'+si].Value2 := StringGrid1.Cells[2,r];
   Hoja.Range['D'+si,'D'+si].Value2 := StringGrid1.Cells[3,r];
   r := r + 1;
   Inc( i );
   si := IntToStr( i );
 Until (r >= 100);
 //formato de fecha
 Format := 'dd/mm/yyyy';
 Hoja.Range['C2','D10'].NumberFormat := Format;
 // Damos formato a los totales
 Hoja.Range['A1','D1'].Font.Bold := True;          // fuente negrita
 Hoja.Range['A1','D1'].Interior.Color := clLime;       // Interior Verde Lima
 Hoja.Range['A1','D1'].Borders.Weight := xlMedium;
 hoja.Range['A2','D10'].Borders.Weight := xlThin;
 Hoja.Range['A1','D1'].HorizontalAlignment := xlCenter;
 Hoja.Range['B2','B10'].Columns.AutoFit;
 //Hoja.Range['C2','D10'].HorizontalAlignment := xlLeft;
 //Deshabilitamos alerta de sobreescritura
 Excel.Application.DisplayAlerts[1] := False;
 // Lo primero que hacemos es guardarlo
 Excel.ActiveWorkbook.SaveAs( ExtractFilePath( Application.ExeName ) + 'Data\Trabajos.xls',
  EmptyParam, EmptyParam, EmptyParam,
  EmptyParam, EmptyParam, xlNoChange,
  EmptyParam, EmptyParam, EmptyParam,
  EmptyParam, EmptyParam, 0);
 Excel.Quit;
 Excel.Disconnect;
end;

La verdad que parte del codigo lo saque de internet y anda bien... y no veo errores!

si alguien me puede dar una mano seria GENIAL!

Desde ya muchas gracias

Salu2
4n71chr157

GerTorresM 22-07-2014 22:09:55

Mira los formatos
 
Código Delphi [-]
  Hoja.Cells[i,5].NumberFormat:= 'DD/MM/YYYY';
  
  for j := 5 to 22 do
    Hoja.Cells[i,j].NumberFormat := '#,##0';


La franja horaria es GMT +2. Ahora son las 08:00:37.

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