Как экспортировать содержимое DBGrid в Excel или ClipBoard
КОГДА при виде трупа ваша первая мысля - обыскать.
Когда вас ВСЕГДА окружают пять верных рузей.
Когда вы ВЕЗДЕ таскаете за собой пыльный мешок с надписью "инвентарь".
И наконец когда вы ВСЮДУ ищите неприятности - значит вам ДАВНО пора бросать играть в БАЛДУРС ГЕЙТ!
// ЗАМЕЧАНИЕ: этот метод должен включать COMObj, Excel97 units// ОБНОВЛЕНИЕ: если Вы используете Delphi 4, то замените xlWBatWorkSheet на 1 (один)//-----------------------------------------------------------// если toExcel = false, то экспортируем содержимое dbgrid в Clipboard// если toExcel = true, то экспортируем содержимое dbgrid в Microsoft Excel//-----------------------------------------------------------procedure ExportDBGrid(toExcel: Boolean);
var
bm: TBookmark;
col, row: Integer;
sline: string;
mem: TMemo;
ExcelApp: Variant;
begin
Screen.Cursor := crHourglass;
DBGrid1.DataSource.DataSet.DisableControls;
bm := DBGrid1.DataSource.DataSet.GetBookmark;
DBGrid1.DataSource.DataSet.First;
// создаём объект Excelif toExcel thenbegin
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.WorkBooks.Add(xlWBatWorkSheet);
ExcelApp.WorkBooks[1].WorkSheets[1].name := 'Grid Data';
end;
// Сперва отправляем данные в memo// работает быстрее, чем отправлять их напрямую в Excel
mem := TMemo.Create(Self);
mem.Visible := false;
mem.Parent := MainForm;
mem.Clear;
sline := '';
// добавляем информацию для имён колонокfor col := 0 to DBGrid1.FieldCount-1 do
sline := sline + DBGrid1.Fields[col].DisplayLabel + #9;
mem.Lines.Add(sline);
// получаем данные из memofor row := 0 to DBGrid1.DataSource.DataSet.RecordCount-1 dobegin
sline := '';
for col := 0 to DBGrid1.FieldCount-1 do
sline := sline + DBGrid1.Fields[col].AsString + #9;
mem.Lines.Add(sline);
DBGrid1.DataSource.DataSet.Next;
end;
// копируем данные в clipboard
mem.SelectAll;
mem.CopyToClipboard;
// если необходимо, то отправляем их в Excel// если нет, то они уже в буфере обменаif toExcel thenbegin
ExcelApp.Workbooks[1].WorkSheets['Grid Data'].Paste;
ExcelApp.Visible := true;
end;
FreeAndNil(ExcelApp);
DBGrid1.DataSource.DataSet.GotoBookmark(bm);
DBGrid1.DataSource.DataSet.FreeBookmark(bm);
DBGrid1.DataSource.DataSet.EnableControls;
Screen.Cursor := crDefault;
end;
В статье описывается метод экспорта содержимого DBGrid в Microsoft Excel или в буфер обмена (Clipboard) с помощью COM-объекта и компонента Excel.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.