2013-06-12 41 views
5

Tôi muốn biết liệu có ai đó có thể xuất dữ liệu từ DBGrid sang Excel không? Tôi đang sử dụng Delphi 7, Excel 2007 và ADO.
Mọi trợ giúp sẽ được đánh giá cao.Xuất dữ liệu từ DBGrid sang Excel

+0

Đừng xuất DBGrid, xuất dữ liệu http://stackoverflow.com/a/16642049/1699210 chỉ cần điền arrData từ ví dụ đã cho với các giá trị trường. – bummi

+0

Tôi cũng sẽ đưa ra tham chiếu mà Bummi đưa ra. Để sử dụng phương pháp tiếp cận mảng biến thể, bạn phải biết có bao nhiêu hàng bạn có trong truy vấn. Nếu không nó có thể đơn giản hơn để sử dụng phương pháp tiếp cận csv mà tôi đã đưa ra trong câu hỏi đó. –

+1

@ No'amNewman tùy thuộc vào datataypes cách tiếp cận csv có thể gây ra nhiều rắc rối hơn trong hội tụ, ví dụ: Giá trị ngày giờ ... – bummi

Trả lời

10

Nếu bạn muốn có một xuất nhanh dữ liệu thô, chỉ cần xuất recordset của bạn (ADODataset.recordset) với một cái gì đó như thế:

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

Và nếu chúng ta muốn xuất một ClientDataset sang Excel thì chúng ta làm gì? – Amin

+0

Nếu bạn không có bản ghi, bạn phải lặp lại tập dữ liệu của mình và viết các ô accceling excel. ví dụ: ovWS.Cells [RowIndex, ColumnIndex] .Value: = Dataset.FieldByName ('foo'). AsString; –

Các vấn đề liên quan