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);
Excel.Connect;
Excel.Workbooks.Add( NULL, 0 );
Hoja := Excel.Worksheets.Item[1] as _WorkSheet;
Hoja.Name := 'Clientes';
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['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;
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);
Format := 'dd/mm/yyyy';
Hoja.Range['C2','D10'].NumberFormat := Format;
Hoja.Range['A1','D1'].Font.Bold := True; Hoja.Range['A1','D1'].Interior.Color := clLime; 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;
Excel.Application.DisplayAlerts[1] := False;
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