2013-06-12 5 views
5

Я хотел знать, есть ли кто-нибудь, каким образом я могу экспортировать данные из DBGrid в Excel? Я использую Delphi 7, Excel 2007 и ADO.
Любая помощь будет оценена по достоинству.Экспорт данных из DBGrid в Excel

+0

Не экспортировать DBGrid, экспортировать набор данных http://stackoverflow.com/a/16642049/1699210 просто заполните arrData из данного примера значениями полей. – bummi

+0

Я тоже собирался дать ссылку, которую дал Бамми. Чтобы использовать подход с вариантным массивом, вы должны знать, сколько строк у вас в запросе. В противном случае может быть проще использовать подход csv, который я дал в этом вопросе. –

+1

@ No'amNewman в зависимости от datataypes подход csv может дать больше проблем при конверсиях, например. Значения DateTime ... – bummi

ответ

10

Если вы хотите быстрый экспорт необработанных данных, просто экспортировать записи (ADODataset.recordset) с чем-то вроде этого:

procedure ExportRecordsetToMSExcel(DestName: string; Data: _Recordset); 
var 
    ovExcelApp: OleVariant; 
    ovExcelWorkbook: OleVariant; 
    ovWS: OleVariant; 
    ovRange: OleVariant; 
begin 
    ovExcelApp := CreateOleObject('Excel.Application'); //If Excel isnt installed will raise an exception 
    try 
    ovExcelWorkbook := ovExcelApp.WorkBooks.Add; 
    ovWS := ovExcelWorkbook.Worksheets.Item[1]; // go to first worksheet 
    ovWS.Activate; 
    ovWS.Select; 
    ovRange := ovWS.Range['A1', 'A1']; //go to first cell 
    ovRange.Resize[Data.RecordCount, Data.Fields.Count]; 
    ovRange.CopyFromRecordset(Data, Data.RecordCount, Data.Fields.Count); //this copy the entire recordset to the selected range in excel 
    ovWS.SaveAs(DestName, 1, '', '', False, False); 
    finally 
    ovExcelWorkbook.Close(SaveChanges := False); 
    ovWS := Unassigned; 
    ovExcelWorkbook := Unassigned; 
    ovExcelApp := Unassigned; 
    end; 
end; 
+0

И если мы хотим экспортировать ClientDataset в Excel, то что мы делаем? – Amin

+0

Если у вас нет набора записей, вам нужно итерировать свой набор данных и писать ячейки, подходящие для использования в excel. например: ovWS.Cells [RowIndex, ColumnIndex] .Value: = Dataset.FieldByName ('foo'). AsString; –

Смежные вопросы