سلام
من با این کد اطلاعات یک DBGrid رو توی اکسل میریزم، شاید کمکت کنه
Screen.Cursor := crHourGlass; try
db := dbgrid1.DataSource.DataSet ;
if db.RecordCount > 0 then
begin
//excellBitBtn.Enabled := false;
DB.DisableControls;
XApp := CreateOleObject('Excel.Application');
XApp.WorkBooks.Add(-4167);
XApp.Caption :=tdbg.Name;
XApp.WorkBooks[1].WorkSheets[1].Name :=tdbg.Name;
sheet := XApp.WorkBooks[1].WorkSheets[tdbg.Name];
db.First;
for filName := 0 to tdbg.Columns.Count - 1 do
begin
q := filName + 1;
sheet.Cells[1, q] :=dbgrid1.Columns[filName].Field.DisplayLabel;
sheet.Cells[1, q].Interior.Color := $00B3F5AD;
sheet.Cells[1, q].Font.size := 10;
sheet.Cells[1, q].Font.Name := 'B Nazanin';
sheet.Cells[1, q].Font.bold :=true ;
sheet.Cells[1, q].Borders.LineStyle := 7;
sheet.Cells[1, q].Borders.Color := clBlack;
end;
for r := 0 to db.RecordCount - 1 do
begin
for c := 0 to dbgrid1.Columns.Count - 1 do
begin
row := r + 2;
col := c + 1;
// sheet.Cells[ROW, COL] :=dbgrid1.Columns[c].Field.DisplayText
if dbgrid1.Columns[c].Field.DataType in [ftSmallint, ftInteger, ftWord,ftFloat, ftCurrency, ftAutoInc, ftLargeint] then
sheet.Cells[ROW, COL]:= dbgrid1.Columns[c].Field.AsFloat
else
sheet.Cells[ROW, COL]:= dbgrid1.Columns[c].Field.AsString ;
end;
db.Next;
end;
XApp.WorkSheets[dbgrid1.Name].Columns.AutoFit;
XApp.WorkSheets[dbgrid1.Name].Columns.Font.size := 13;
XApp.WorkSheets[dbgrid1.Name].Columns.Font.Name := 'B Lotus';
XApp.Visible := true;
WinActivate('sheet1 - '+dbgrid1.Name);
db.EnableControls;
end ;
finally
Screen.Cursor := crDefault;;
end;