Lấy dữ liệu từ file Excel

Các mẹo vặt linh tinh không thuộc các nhóm trên

Các điều hành viên: tungcan5diop, QUANITGROBEST

Đăng trả lời
Hình đại diện của thành viên
NoBi
Quản trị
Quản trị
Bài viết: 970
Ngày tham gia: Thứ 3 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 57 times
Been thanked: 66 times
Tiếp xúc:

Lấy dữ liệu từ file Excel

Gửi bài by NoBi »

Thủ thuật: Lấy dữ liệu từ file Excel
Tác giả: Sưu tầm
Mô tả: Đổ dữ liệu từ 1 sheet trong file Excel vào DataTable

Mã: Chọn tất cả

/// <summary>    /// Read data from excel and return a DataTable    /// </summary>    /// <param name="Path">Path of Excel file</param>    /// <param name="SheetName">Name of WorkSheet</param>    /// <returns>DataTable</returns>    public static DataTable Read(string Path, string SheetName)    {        //Connect to Access        System.Data.OleDb.OleDbConnection MyConnection = null;         try        {            // Fetch Data from Excel            System.Data.OleDb.OleDbDataAdapter MyCommand;            string strConnectionString = "provider=Microsoft.Jet.OLEDB.4.0; data source='" + Path + "'; Extended Properties=Excel 8.0;";             MyConnection = new System.Data.OleDb.OleDbConnection(strConnectionString);             // Select the data from the sheet of workbook.            MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [" + SheetName + "$]", MyConnection);            MyCommand.TableMappings.Add("Table", "Attendence");             System.Data.DataSet DtSet = new System.Data.DataSet();            MyCommand.Fill(DtSet);             DataTable tblSheet = (DataTable)DtSet.Tables[0];                      MyConnection.Close();             return tblSheet;        }        catch (Exception e)        {            MyConnection.Close();            return null;        }    }
:>
Hình đại diện của thành viên
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: Thứ 4 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 27 times

Re: Lấy dữ liệu từ file Excel

Gửi bài by tungcan5diop »

thanks anh Nobi
sau đây là code bằng Vb.net

Mã: Chọn tất cả

''' <summary>    '''     ''' </summary>    ''' <param name="path">tên đường dẫn chứa file Excell</param>    ''' <param name="SheetName"> tên của Sheet trong file Excell</param>    ''' <returns></returns>    ''' <remarks></remarks>    Function Read(ByVal path As String, ByVal SheetName As String) As DataSet        Dim myconnection As System.Data.OleDb.OleDbConnection = Nothing        Try            Dim Mycommand As System.Data.OleDb.OleDbDataAdapter = Nothing            'Dim strConnectionString As String = "provider=Microsoft.Jet.OLEDB.4.0; data source= '" + Application.StartupPath + "' " / " '" + path + "'; Extended Properties=Excel 8.0;"            myconnection = New System.Data.OleDb.OleDbConnection(connstring)            Mycommand = New System.Data.OleDb.OleDbDataAdapter("select * from  [" & SheetName & "$]", myconnection)            Dim DtSet As DataSet = New DataSet            Mycommand.Fill(DtSet)            myconnection.Close()            Return DtSet        Catch ex As Exception            myconnection.Close()            Return Nothing        End Try    End Function
với

Mã: Chọn tất cả

   Private Const connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _    "Data Source=C:\Documents and Settings\admin\Desktop\Book1.xls;Extended Properties=""Excel 8.0;HDR=YES;"""
sau khi có DataTable rồi,load lên datagridview

Mã: Chọn tất cả

 Me.DataGridView1.DataSource = DtSet.Tables(0)
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!
ktttnotc
Thành viên chính thức
Thành viên chính thức
Bài viết: 26
Ngày tham gia: Thứ 2 27/07/2009 6:44 pm
Has thanked: 2 times
Tiếp xúc:

Re: Lấy dữ liệu từ file Excel

Gửi bài by ktttnotc »

Thanhks bác NoBi và bác Tungcan5diop rất rất ..... nhiều mình đang cần
mình cũng có 1 vấn đề mong 2 bác chỉ giúp . khi mình chuyển data từ excel vào datagridview thì có nhiều cell lại trống mà trong excel thi lại không theo mình nghĩ do trong 1 cột của excel các cell không cùng 1 format ( ví dụ có cell là text 0123 có cell là number 123) bác nào có cách giải quyết thì giúp mình với ( không format trong excel )
Thanks !
Hình đại diện của thành viên
NoBi
Quản trị
Quản trị
Bài viết: 970
Ngày tham gia: Thứ 3 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 57 times
Been thanked: 66 times
Tiếp xúc:

Re: Lấy dữ liệu từ file Excel

Gửi bài by NoBi »

Lúc trước mình cũng bị lỗi này và khắc phục bằng cách dùng Excel Automation (dùng DLL của Excel do đó máy phải cài Excel mới chạy dc)
:>
ktttnotc
Thành viên chính thức
Thành viên chính thức
Bài viết: 26
Ngày tham gia: Thứ 2 27/07/2009 6:44 pm
Has thanked: 2 times
Tiếp xúc:

Re: Lấy dữ liệu từ file Excel

Gửi bài by ktttnotc »

NoBi đã viết:Lúc trước mình cũng bị lỗi này và khắc phục bằng cách dùng Excel Automation (dùng DLL của Excel do đó máy phải cài Excel mới chạy dc)
Thanhks ban NoBi

Bạn có thể nói rõ hơn được không vậy bạn,máy mình dang cài office 2003
Hình đại diện của thành viên
NoBi
Quản trị
Quản trị
Bài viết: 970
Ngày tham gia: Thứ 3 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 57 times
Been thanked: 66 times
Tiếp xúc:

Re: Lấy dữ liệu từ file Excel

Gửi bài by NoBi »

Bạn vào Google tìm kiếm với "Excel Automation in .Net" sẽ thấy. Sau đây là 2 link mẫu:
http://www.vbdotnetheaven.com/UploadFil ... sheet.aspx
http://www.c-sharpcorner.com/uploadfile ... ation.aspx
:>
thinhdq084
Thành viên chính thức
Thành viên chính thức
Bài viết: 11
Ngày tham gia: Thứ 7 17/04/2010 2:03 am
Been thanked: 2 times

Re: Lấy dữ liệu từ file Excel

Gửi bài by thinhdq084 »

Liệu có cần thiết phải làm kết nối dài dòng vậy không nhỉ.
mình có một form nhỏ thế này mọi người tham khảo nhé.

Form của mình:
Hình ảnh

Đầu tiên ccs bạn add reference:
Hình ảnh
Chọn Library
Hình ảnh

và đây là Source code do mình viết:

Mã: Chọn tất cả

Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form2
    Public xlApp As Excel.Application
    Public xlWorkBook As Excel.Workbook
    Public xlWorkSheet As Excel.Worksheet

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        OpenFileDialog1.Filter = "Excel (*.xls;*.xlsx)|*.xls;*.xlsx"
        OpenFileDialog1.ShowDialog()

        'Lấy Path từ OpenFileDialog1 nhét vào Textbox
        TextBox1.Text = OpenFileDialog1.FileName

        'Mở Excel Application
        xlApp = New Excel.ApplicationClass

        'Mở File Excel đã chọn
        xlWorkBook = xlApp.Workbooks.Open(TextBox1.Text)

        'Lấy tên tất cả các Sheet
        For Each xlWorkSheet In xlWorkBook.Worksheets
            ComboBox1.Items.Add(xlWorkSheet.Name)
        Next xlWorkSheet

        'Gán tên Sheet đầu tiên cho Combobox
        ComboBox1.Text = (ComboBox1.Items(0).ToString())
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        'Lấy dữ liệu từ File
        xlWorkSheet = xlWorkBook.Worksheets(ComboBox1.Text)

        'Duyệt các dòng có dữ liệu, bỏ qua dòng tiêu đề là dòng 1
        Dim i, j As Integer
        For i = 2 To xlWorkSheet.Rows.Count

            'Duyệt 5 cột đầu tiên
            For j = 1 To 5
                Dim s As String = xlWorkSheet.Cells(i, j).value
                'Kiểm tra nếu ô đầu tiên của dòng là Null thì thoát khỏi For....Next
                If s = Nothing Then
                    Exit For
                Else
                    'Chỗ này muốn làm gì thì làm
                End If
            Next
            Exit For
        Next
        MsgBox("xong rồi")

        'Close File and Excel Application
        xlWorkBook.Close()
        xlApp.Quit()
    End Sub
End Class
truongqt
Thành viên chính thức
Thành viên chính thức
Bài viết: 11
Ngày tham gia: Thứ 4 10/11/2010 8:53 pm
Has thanked: 2 times

Re: Lấy dữ liệu từ file Excel

Gửi bài by truongqt »

Mấy cái hình mất tiêu đâu rồi, mấy bác xem lại giùm em cái
phamthithuy
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 80
Ngày tham gia: Thứ 2 06/05/2013 10:16 am
Has thanked: 29 times
Been thanked: 4 times

Re: Lấy dữ liệu từ file Excel

Gửi bài by phamthithuy »

cho e hỏi a tungcan5diop 1 điều là
ê đang đọc file excel lên datagidview
đây là code

Mã: Chọn tất cả

Public Function GetConnectionString(ByVal excelFileName As String) As String
        Dim strConnectionString As String = ""
        If Path.GetExtension(excelFileName).ToLower() = ".xlsx" Then
            strConnectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";", excelFileName)
        ElseIf Path.GetExtension(excelFileName).ToLower() = ".xls" Then
            strConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";", excelFileName)
        End If
        Return (strConnectionString)
    End Function
    Public Sub LoadData(ByVal excelFileName As String)

        Dim dt As New DataTable()
        ' Dim i As Integer
        Dim cmdText As String = "SELECT * FROM [Sheet1$]"
        Using adapter As New OleDbDataAdapter(cmdText, GetConnectionString(excelFileName))
            adapter.Fill(dt)
        End Using
        dgvLoad.DataSource = dt
        ' MsgBox(dt.Columns(0).ToString())
    End Sub

    Private Sub btDuyet_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btDuyet.Click
        Dim openFileDialog1 As New OpenFileDialog()
        openFileDialog1.InitialDirectory = Application.StartupPath
        openFileDialog1.Filter = "Excel Files (.xlsx)|*.xlsx|All Files (*.*)|*.*"
        openFileDialog1.FilterIndex = 2
        If openFileDialog1.ShowDialog() = DialogResult.OK Then
            LoadData(openFileDialog1.FileName)
            txtExcel.Text = openFileDialog1.FileName
        End If
    End Sub
Thế nhưng e muốn hỏi là đối với những file excel ko có sheet mặc định là sheet1 thì code e chạy bị lỗi ngay
có thể cho e hỏi là giờ làm sao mình xác định được sheet của file excel là gì? để mình truyền vô ko ạ.
E mới học nên nhờ a giúp đỡ
Đăng trả lời

Quay về