• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

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

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
NoBi
Quản trị
Quản trị
Bài viết: 943
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 50 time
Been thanked: 64 time
Liên hệ:

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

Gửi bàigửi bởi NoBi » T.Năm 13/08/2009 3:58 pm

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 hết

  1. /// <summary>
  2.     /// Read data from excel and return a DataTable
  3.     /// </summary>
  4.     /// <param name="Path">Path of Excel file</param>
  5.     /// <param name="SheetName">Name of WorkSheet</param>
  6.     /// <returns>DataTable</returns>
  7.     public static DataTable Read(string Path, string SheetName)
  8.     {
  9.         //Connect to Access
  10.         System.Data.OleDb.OleDbConnection MyConnection = null;
  11.  
  12.         try
  13.         {
  14.             // Fetch Data from Excel
  15.             System.Data.OleDb.OleDbDataAdapter MyCommand;
  16.             string strConnectionString = "provider=Microsoft.Jet.OLEDB.4.0; data source='" + Path + "'; Extended Properties=Excel 8.0;";
  17.  
  18.             MyConnection = new System.Data.OleDb.OleDbConnection(strConnectionString);
  19.  
  20.             // Select the data from the sheet of workbook.
  21.             MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [" + SheetName + "$]", MyConnection);
  22.             MyCommand.TableMappings.Add("Table", "Attendence");
  23.  
  24.             System.Data.DataSet DtSet = new System.Data.DataSet();
  25.             MyCommand.Fill(DtSet);
  26.  
  27.             DataTable tblSheet = (DataTable)DtSet.Tables[0];        
  28.  
  29.             MyConnection.Close();
  30.  
  31.             return tblSheet;
  32.         }
  33.         catch (Exception e)
  34.         {
  35.             MyConnection.Close();
  36.             return null;
  37.         }
  38.     }


:>

Hình đại diện của người dùng
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

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

Gửi bàigửi bởi tungcan5diop » T.Sáu 14/08/2009 1:19 pm

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

Mã: Chọn hết

  1. ''' <summary>
  2.     '''
  3.     ''' </summary>
  4.     ''' <param name="path">tên đường dẫn chứa file Excell</param>
  5.     ''' <param name="SheetName"> tên của Sheet trong file Excell</param>
  6.     ''' <returns></returns>
  7.     ''' <remarks></remarks>
  8.     Function Read(ByVal path As String, ByVal SheetName As String) As DataSet
  9.         Dim myconnection As System.Data.OleDb.OleDbConnection = Nothing
  10.         Try
  11.             Dim Mycommand As System.Data.OleDb.OleDbDataAdapter = Nothing
  12.             'Dim strConnectionString As String = "provider=Microsoft.Jet.OLEDB.4.0; data source= '" + Application.StartupPath + "' " / " '" + path + "'; Extended Properties=Excel 8.0;"
  13.             myconnection = New System.Data.OleDb.OleDbConnection(connstring)
  14.             Mycommand = New System.Data.OleDb.OleDbDataAdapter("select * from  [" & SheetName & "$]", myconnection)
  15.             Dim DtSet As DataSet = New DataSet
  16.             Mycommand.Fill(DtSet)
  17.             myconnection.Close()
  18.             Return DtSet
  19.         Catch ex As Exception
  20.             myconnection.Close()
  21.             Return Nothing
  22.         End Try
  23.     End Function

với

Mã: Chọn hết

  1.   Private Const connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
  2.     "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 hết

  1. 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: T.Hai 27/07/2009 6:44 pm
Has thanked: 2 time
Liên hệ:

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

Gửi bàigửi bởi ktttnotc » T.Tư 09/09/2009 10:04 pm

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 người dùng
NoBi
Quản trị
Quản trị
Bài viết: 943
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 50 time
Been thanked: 64 time
Liên hệ:

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

Gửi bàigửi bởi NoBi » T.Sáu 11/09/2009 7:12 pm

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: T.Hai 27/07/2009 6:44 pm
Has thanked: 2 time
Liên hệ:

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

Gửi bàigửi bởi ktttnotc » T.Sáu 11/09/2009 8:32 pm

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 người dùng
NoBi
Quản trị
Quản trị
Bài viết: 943
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 50 time
Been thanked: 64 time
Liên hệ:

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

Gửi bàigửi bởi NoBi » CN 13/09/2009 12:29 pm

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: T.Bảy 17/04/2010 2:03 am
Been thanked: 2 time

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

Gửi bàigửi bởi thinhdq084 » T.Ba 18/05/2010 1:15 am

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 hết

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: T.Tư 10/11/2010 8:53 pm
Has thanked: 2 time

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

Gửi bàigửi bởi truongqt » T.Hai 11/03/2013 4:25 pm

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: T.Hai 06/05/2013 10:16 am
Has thanked: 29 time
Been thanked: 4 time

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

Gửi bàigửi bởi phamthithuy » T.Hai 24/06/2013 9:58 am

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

Mã: Chọn hết

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 đỡ


Quay về “[.NET] Mẹo vặt khác”

Đang trực tuyến

Đang xem chuyên mục này: Bing [Bot]0 khách