Đọc file Excel với ADO.NET trong C#

Trong nhiều trường hợp. Chúng ta có 1 file dữ liệu bằng Excel (*.xls, *.xlsx) cần dùng trong quá trình xử lý của chương trình. Bằng cách sử dụng ADO.NET chúng ta sẽ dễ dàng đọc dữ liệu trên file Excel. Bài viết này sẽ trình bày cách đọc dữ liệu từ file Excel và hiển thị dữ liệu đọc được ra dataGridView (Có source code demo cụ thể).

1. Khai báo sử dụng thu viện:

Để sử dụng ADO.NET đọc file Excel, đầu tiên chúng ta cần phải có các khai báo using thư viện sau:

using System.Data.OleDb;

Thư viện này sẽ có các hàm cung cấp sẵn giúp chúng ta đọc file Excel từ C# dễ dàng hơn.

2. Source code đọc file Excel (như hình dưới đây) bằng C#

image

// Read Excel Contents public DataTable ReadExcelContents(string fileName)
{
    try {
        OleDbConnection connection = new OleDbConnection();

        connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" + fileName); //Excel 97-2003, .xls //string excelQuery = @"Select [Day],[Outlook],[temp],[Humidity],[Wind], [PlaySport] // FROM [Sheet1$]";

        string excelQuery = @"Select * FROM [Sheet1$]";
        connection.Open();
        OleDbCommand cmd = new OleDbCommand(excelQuery, connection);
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = cmd;
        DataSet ds = new DataSet();
        adapter.Fill(ds);
        DataTable dt = ds.Tables[0];

        dataGridView1.DataSource = dt.DefaultView;
        connection.Close();
        return dt;
    }
    catch (Exception ex)
    {
        MessageBox.Show("Program can't read file. " + ex.Message, "Please Note", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return null;
    }
}

–  Đoạn code trên là hàm xử lý việc đọc file Excel, với đối số là đường dẫn tới file Excel.

–  Đầu tiên chúng ta khai báo một connection để sử dụng cho quá trình đọc file. Đối số này có có một thành phần quan trọng là Data Source sẽ là đường dẫn tới file Excel mà ta muốn đọc.

–  Câu lệnh  string excelQuery = @”Select * FROM [Sheet1$]”;  giống như trong SQL. Chọn tất cả các cột từ Sheet1 của file Excel.

–  Tương tự câu lệnh

string excelQuery = @”Select [Day],[Outlook],[temp],[Humidity],[Wind], [PlaySport]
FROM [Sheet1$]”;

Chọn từng cột dữ liệu từ Sheet1 của file Excel.

–  dataGridView1.DataSource = dt.DefaultView;  dùng để gắn dữ liệu trong dataTable lên DataGridView1.

–  Khi đọc xong thì đóng kết nối lại:  connection.Close();

3. Chương trình Demo đọc dữ liệu từ File Excel với C#

image

Click vào đây để download source code của chương trình Demo đọc file Excel với C#

Chúc bạn thành công!

(thanhcuong1990@gmail.com)

Advertisements

About thanhcuong1990

Handsome and talent!! ^^
This entry was posted in C#. Bookmark the permalink.

17 Responses to Đọc file Excel với ADO.NET trong C#

  1. khoa says:

    thanks

  2. Baongan says:

    bài này có thể viết trên class được đúng không bạn? Bạn có thể trên class và giải thích giúp cho mình hiểu dược không? mình mới hoc về class nhưng khó hiểu quá bạn giúp mình với thanks bạn nhiều nhaz

  3. đăng khánh says:

    mình viết lại theo kiểu class đây

    class connect
    {
    public OleDbConnection strcon(string pathFile)
    {
    return new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" + pathFile);
    }
    }

    class DataExcel
    {
    connect _con = new connect();

    public DataTable Gettable(string st,string pathfile)
    {
    try
    {

    _con.strcon(pathfile).Open();
    OleDbCommand cmd = new OleDbCommand(st, _con.strcon(pathfile));
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    // adapter.SelectCommand = cmd;
    DataSet ds = new DataSet();
    adapter.Fill(ds);
    DataTable dt = ds.Tables[0];
    _con.strcon(pathfile).Close();
    return dt;
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.ToString());

    }
    }
    }
    }

    private void button1_Click(object sender, EventArgs e)
    {
    OpenFileDialog brown = new OpenFileDialog();
    brown.Filter = "Excel File|*.xls";
    if (brown.ShowDialog() == DialogResult.OK)
    {
    string str=@"select * from [sheet1$]";
    DataExcel da = new DataExcel();
    dataGridView1.DataSource = da.Gettable(str, brown.FileName).DefaultView;
    }
    }

  4. DUNG says:

    Hey! minh nhan duoc thong bao loi nay
    ""Program can't read file. " + ex.Message, "Please Note", MessageBoxButtons.OK, MessageBoxIcon.Error"

  5. Cao Chí Nguyện says:

    Thank!
    Đây đúng là thứ mình đang cần
    Cám ơn bạn một lần nữa!

  6. Thao says:

    thank bạn nhìu.Mình cũng đang học về cái này:d

  7. Thao says:

    bạn ơi bạn có thể viết 1 ví dụ để lưu csdl trên vào sql server 2005 không??
    Mình đang cần Import một loạt các file excel vào slq server 2005 mà không biết viết chương trình thế nào. Mong bạn chỉ dẫn.

  8. dmttuan says:

    Chương trình demo đã load lên dataGridView bằng DataTable thì bạn có thể sửa lại tí xíu là có thể import vô đc thôi. Bạn có thể dùng DataRow đọc từng dòng và add vô CSDL hoặc đọc từng dòng trên dataGridView cũng đc…Theo cách làm của demo này thì cũng tương tự như ban đang Select trên SQL Server zị đó :D. Câu lệnh na ná nhau thui

  9. Bị lỗi đọc font chữ Time New Roman thì phải !

  10. Tran Vinh says:

    Hay quá, đúng cái mình đang cần 😀
    Nhưng mình thử thay chuỗi kết nối bằng
    connection = new OleDbConnection(“Provider=Microsoft.Jet.OLEDB.14.0;Extended Properties=Excel 14.0;Data Source=” + fileName);
    Vì mình dùng Office 2010 với đuôi là xlsx thì bị thông báo lỗi : could not registerd on local machine

    Bạn có thể giúp mình được không?

  11. Tran Vinh says:

    Thêm một vấn đề nữa: code này sẽ hoạt động khi file Excel đúng định dạng: dòng đầu tiên là tên cột. Vậy nếu file Excel của mình từ dòng thứ 3 thì làm sao để đọc được?

  12. CooLLife Tuấn says:

    Tuyệt vời, cám ơn bạn rất nhiều

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s