Merging Multiple Excel Files to a Single Dataset / Excel File

sandeepparekh9 0 Tallied Votes 539 Views Share

hi..

i just made two function related to excel .

1. Merging all sheet of excel as tables in single Dataset
2. Exporting a dataset to Excel File .(all the tables of dataset as sheets)

i just wanted to share.. i hope it becomes helpful to you.


ps: Dont forget to add references to

Imports Microsoft.Office.Interop.Excel
Imports System.Data.OleDb
'The Merging Function
    Public Sub MergeExcelInDataSet(ByVal strExcelFile As String, ByRef ds As DataSet)
        Dim objExcel As Microsoft.Office.Interop.Excel.Application
        Dim objWorkBook As Microsoft.Office.Interop.Excel.Workbook
        Dim tmpWorkSheet As Microsoft.Office.Interop.Excel.Worksheet

        objExcel = CreateObject("Excel.Application")
        objWorkBook = objExcel.Workbooks.Open(strExcelFile)

        Dim strSheetName(objWorkBook.Worksheets.Count - 1) As String
        Dim i As Integer = 0
        For Each tmpWorkSheet In objWorkBook.Worksheets
            strSheetName(i) = tmpWorkSheet.Name
            i += 1
        Next

        objExcel.Quit()
        releaseObject(objExcel)
        releaseObject(objWorkBook)
        releaseObject(tmpWorkSheet)


        Dim conn As New System.Data.OleDb.OleDbConnection(String.Format("provider=Microsoft.Jet.OLEDB.4.0; Data Source='{0}';" & "Extended Properties='Excel 8.0;HDR=YES;'", strExcelFile))
        For Each str As String In strSheetName
            Dim da As New System.Data.OleDb.OleDbDataAdapter("Select * from [" & str & "$]", conn)
            da.Fill(ds, str)
        Next

    End Sub


'The Exporting Function
    Public Sub ExportDatasetToExcel(ByVal ds As DataSet, ByVal strExcelFile As String)

        Dim conn As New System.Data.OleDb.OleDbConnection(String.Format("provider=Microsoft.Jet.OLEDB.4.0; Data Source='{0}';" & "Extended Properties='Excel 8.0;HDR=YES;'", strExcelFile))
        conn.Open()

        Dim strTableQ(ds.Tables.Count) As String

        Dim i As Integer = 0

        'making table query
        For i = 0 To ds.Tables.Count - 1

            strTableQ(i) = "CREATE TABLE [" & ds.Tables(i).TableName & "]("

            Dim j As Integer = 0
            For j = 0 To ds.Tables(i).Columns.Count - 1
                Dim dCol As DataColumn
                dCol = ds.Tables(i).Columns(j)
                strTableQ(i) &= " [" & dCol.ColumnName & "] varchar(255) , "
            Next
            strTableQ(i) = strTableQ(i).Substring(0, strTableQ(i).Length - 2)
            strTableQ(i) &= ")"

            Dim cmd As New OleDbCommand(strTableQ(i), conn)
            cmd.ExecuteNonQuery()

        Next

        'making insert query
        Dim strInsertQ(ds.Tables.Count - 1) As String
        For i = 0 To ds.Tables.Count - 1
            strInsertQ(i) = "Insert Into " & ds.Tables(i).TableName & " Values ("
            For k As Integer = 0 To ds.Tables(i).Columns.Count - 1
                strInsertQ(i) &= "@" & ds.Tables(i).Columns(k).ColumnName & " , "
            Next
            strInsertQ(i) = strInsertQ(i).Substring(0, strInsertQ(i).Length - 2)
            strInsertQ(i) &= ")"
        Next

        'Now inserting data
        For i = 0 To ds.Tables.Count - 1
            For j As Integer = 0 To ds.Tables(i).Rows.Count - 1
                Dim cmd As New OleDbCommand(strInsertQ(i), conn)
                For k As Integer = 0 To ds.Tables(i).Columns.Count - 1
                    cmd.Parameters.AddWithValue("@" & ds.Tables(i).Columns(k).ColumnName.ToString(), ds.Tables(i).Rows(j)(k).ToString())
                Next
                cmd.ExecuteNonQuery()
                cmd.Parameters.Clear()

            Next
        Next
    End Sub

    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub


Example:
        Dim dsFinal As New DataSet
        MergeExcelInDataSet("d:\Book1.xls", dsFinal)
        MergeExcelInDataSet("d:\Book2.xls", dsFinal)
        MergeExcelInDataSet("d:\Book3.xls", dsFinal)
        MergeExcelInDataSet("d:\Book4.xls", dsFinal)
        MergeExcelInDataSet("d:\Book5.xls", dsFinal)
        'all the excels are in dsFinal dataset now
        'we will export this dataset to excel
        ExportDatasetToExcel(dsFinal, "d:\my.xls")
Tanmoy Ghosh 0 Newbie Poster

Hi,

I want to merge data from multiple excel files in to a single file, and in the final file. if the data is common between any of the work book, then only one will be pasted in the final workbook.(Eg, if name-a is present in more than one workbook, then in the final sheet name-a will apear only once)


can you help me with this???????????

sandeepparekh9 109 Posting Whiz

can you provide some data?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.