2013-06-12 153 views
5

Chciałem się dowiedzieć, czy ktoś w jaki sposób mogę eksportować dane z DBGrid do Excela? Używam Delphi 7, Excel 2007 i ADO.
Każda pomoc zostanie doceniona.Eksportowanie danych z DBGrid do Excela

+0

Nie wyeksportować DBGrid, wyeksportować zbiór danych http://stackoverflow.com/a/16642049/1699210 po prostu wypełnij arrData z podanego przykładu wartościami pola. – bummi

+0

Ja też zamierzałem podać odniesienie, które dał Bummi. Aby użyć metody tablicy variant, musisz wiedzieć, ile wierszy masz w zapytaniu. W przeciwnym razie może być prostsze korzystanie z metody csv, którą podałem w tym pytaniu. –

+1

@ No'amNewman w zależności od dat, w których metoda csv może przysporzyć więcej problemów w konwersjach, np. Wartości DateTime ... – bummi

Odpowiedz

10

Jeśli chcesz szybki eksport danych surowych, po prostu wyeksportować rekordów (ADODataset.recordset) coś takiego:

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

A jeśli chcemy eksportować ClientDataset do Excela, to co robimy? – Amin

+0

Jeśli nie masz zestawu rekordów, musisz powtórzyć swój zestaw danych i napisać excel dostęp do komórek. na przykład: ovWS.Cells [RowIndex, ColumnIndex] .Value: = Dataset.FieldByName ("foo"). AsString; –