DATAGRID data to excel

How do I take the data in my datagrid1 control and export it to an instance of excel?

I am using VB 6.

I know someone has done this and I would rather not reinvent the wheel.  Please copy and paste you code on here so I can try it.  

Thanks

strongdAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Éric MoreauSenior .Net ConsultantCommented:
If you have a DataGrid, you surely have a recordset!

See http://support.microsoft.com/default.aspx?scid=kb;en-us;246335&Product=vb6
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Rick_TownsendCommented:
What version of Excel do you have?  If you have Excel 2000 (or higher, I guess), there is a direct export available to you.  Here's an example method from one of my financial apps, we got the source straight from MSDN.  It will work for both Excel 2000+, and Excel 2000-.  It's just slower and less elegant for older Excel versions.

---------------------------

Private Sub SaveAsExcel(Visible As Boolean, Optional FileName As String)
    Dim xlApp As Object
    Dim xlWb As Object
    Dim xlWs As Object

    Dim recArray As Variant
   
    Dim strDB As String
    Dim fldCount As Integer
    Dim recCount As Long
    Dim iCol As Integer
    Dim iRow As Integer
   
   
    ' Create an instance of Excel and add a workbook
    Set xlApp = CreateObject("Excel.Application")
    Set xlWb = xlApp.Workbooks.Add
    Set xlWs = xlWb.Worksheets("Sheet1")
 
    ' Display Excel and give user control of Excel's lifetime
    xlApp.Visible = Visible
    xlApp.UserControl = Visible
   
    ' Copy field names to the first row of the worksheet
'***See that you can put in your own headers, or use the names of the fields from your recordset.
    fldCount = rst.Fields.count
    xlWs.Cells(1, 1) = "Date Created: " & Date
    xlWs.Cells(2, 1) = "Selection Criteria: " & gSelection
    xlWs.Cells(3, 1) = "Sort Order: " & gOrderBy
    For iCol = 1 To fldCount
        xlWs.Cells(5, iCol).Value = rst.Fields(iCol - 1).Name
    Next
       
    ' Check version of Excel
    If val(Mid(xlApp.Version, 1, InStr(1, xlApp.Version, ".") - 1)) > 8 Then
        'EXCEL 2000 or 2002: Use CopyFromRecordset
         
        ' Copy the recordset to the worksheet, starting in cell A2
        xlWs.Cells(7, 1).CopyFromRecordset rst
        'Note: CopyFromRecordset will fail if the recordset
        'contains an OLE object field or array data such
        'as hierarchical recordsets
       
    Else
        'EXCEL 97 or earlier: Use GetRows then copy array to Excel

        ' Copy recordset to an array
        recArray = rst.GetRows
        'Note: GetRows returns a 0-based array where the first
        'dimension contains fields and the second dimension
        'contains records. We will transpose this array so that
        'the first dimension contains records, allowing the
        'data to appears properly when copied to Excel

        ' Determine number of records

        recCount = UBound(recArray, 2) + 1 '+ 1 since 0-based array


        ' Check the array for contents that are not valid when
        ' copying the array to an Excel worksheet
        For iCol = 0 To fldCount - 1
            For iRow = 0 To recCount - 1
                ' Take care of Date fields
                If IsDate(recArray(iCol, iRow)) Then
                    recArray(iCol, iRow) = Format(recArray(iCol, iRow))
                ' Take care of OLE object fields or array fields
                ElseIf IsArray(recArray(iCol, iRow)) Then
                    recArray(iCol, iRow) = "Array Field"
                End If
            Next iRow 'next record
        Next iCol 'next field

        ' Transpose and Copy the array to the worksheet,
        ' starting in cell A2
        xlWs.Cells(2, 1).Resize(recCount, fldCount).Value = TransposeDim(recArray)
    End If

    ' Auto-fit the column widths and row heights
    xlApp.Selection.CurrentRegion.Columns.AutoFit
    xlApp.Selection.CurrentRegion.Rows.AutoFit

    ' Save excel sheet
    CommonDialog1.CancelError = True
    On Error GoTo ErrorHandler
   
    xlWs.SaveAs FileName
    bSaveFlag = True
   
    ' Release Excel references
    Set xlWs = Nothing
    Set xlWb = Nothing
    Set xlApp = Nothing

ErrorHandler:
    'Couldn't save Excel spreadsheet, do some sort of error logging
'***Sensitive lines removed***
End Sub
0
Rick_TownsendCommented:
Ah, emoreau, got the link in there while I was typing.  Guess that will teach me to put the link in first, and then provide actual code after.  Good on ya, anyhow.
0
Big Business Goals? Which KPIs Will Help You

The most successful MSPs rely on metrics – known as key performance indicators (KPIs) – for making informed decisions that help their businesses thrive, rather than just survive. This eBook provides an overview of the most important KPIs used by top MSPs.

Éric MoreauSenior .Net ConsultantCommented:
I prefer to give the link instead of the code. There important text surrounding the code that the asker may find usefull.
0
schworakCommented:
Here is something super generic that should do the trick for you...



Private Sub CopyGridToExcel()
    Dim xl As Object
    Dim wb As Object
    Dim sht As Object
    Dim rs As Object
    Dim ds As Object
    Dim R As Long
    Dim C As Long

    On Error Resume Next
    Set xl = GetObject(, "Excel.Application")
    If Err Then
        Err.Clear
        Set xl = CreateObject("Excel.Application")
    End If
    If Err Then
        MsgBox "Can't get Excel"
        Exit Sub
    End If
    On Error GoTo 0

    xl.Visible = True
    xl.DisplayAlerts = False
    Set wb = xl.Workbooks.Add

    Set sht = wb.sheets(1)
    R = 1
    Set ds = DataGrid1.DataSource
    Set rs = ds.Recordset
    rs.MoveFirst
    Do Until rs.EOF
        For C = 1 To DataGrid1.Columns.Count
            sht.range(Chr(64 + C) & R).Value = DataGrid1.Columns(C - 1).Text
        Next C
        R = R + 1
        rs.MoveNext
    Loop
End Sub
0
strongdAuthor Commented:
These all work but emoreau  was first to respond, therefore he gets the point...

Sorry it took me so long to get back...

0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic Classic

From novice to tech pro — start learning today.