Hướng dẫn cách đọc dữ liệu từ tập tin excel (.xls, .xlsx) trong C#

Trong ví dụ này, Góc Kinh Nghiệm hướng dẫn cách đọc dữ liệu từ tập tin excel (.xls, .xlsx) và hiển thị kết quả lên GridView sử dụng ASP.NET. Chúng ta sẽ kết nối với Microsoft Excel Workbook bằng cách sử dụng  OLEDB.NET data provider.

Chuẩn bị:

Tạo một tập tin excel tên EmployeeInfo.xls (hoặc EmployeeInfo.xlsx) có thông tin và định dạng như sau (hình bên dưới):

  • Cột A (Code): Mã nhân viên
  • Cột B (FullName): họ tên nhân viên
  • Cột C (WorkingYears): số năm kinh nghiệm

Hình: dữ liệu từ tập tin excel

Bước 1: Mở Visual Studio vào File -> New -> Project … -> Web -> ASP.NET Web Application. Nhập tên project “ReadDataFromExcelFile” vào ô Name.

Bước 2: Nhấn chuột phải lên project “ReadDataFromExcelFile” -> Add -> Existing Item -> chọn tập tin EmployeeInfo.xls (hoặc EmployeeInfo.xlsx) vừa tạo ở bước chuẩn bị.

Bước 3: Quay lại project “ReadDataFromExcelFile” -> mở trang Default.aspx. Thêm một GridView vào trang Default.aspx, GridView vừa kéo vào sẽ có tên là “GridView1”

Bước 4: Giờ bạn vào trang code-behide Default.aspx.cs của trang Default.aspx, viết code như sau:

namespace ReadDataFromExcelFile
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // Lấy đường dẫn của tập tin "EmployeeInfo.xls"
            string filePath = Server.MapPath("EmployeeInfo.xls"); // Server.MapPath("EmployeeInfo.xlsx");

            if (!System.IO.File.Exists(filePath))
            {
                return;
            }

            // Cắt đường dẫn tập tin để kiểm tra xem là xls hay xlsx
            string[] fileParts = filePath.Split('.');

            string connString = "";
            if (filePath.Length > 1 && fileParts[1] == "xls")// sử dụng cho Microsoft Excel 2003
            {
                connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=Excel 8.0";
            }
            else // sử dụng cho Microsoft Excel 2007
            {
                connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=Excel 12.0";
            }

            // Tạo đối tượng kết nối
            OleDbConnection oledbConn = new OleDbConnection(connString);
            try
            {
                // Mở kết nối
                oledbConn.Open();

                // Tạo đối tượng OleDBCommand và query data từ sheet có tên "Sheet1"
                OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", oledbConn);

                // Tạo đối tượng OleDbDataAdapter để thực thi việc query lấy dữ liệu từ tập tin excel
                OleDbDataAdapter oleda = new OleDbDataAdapter();

                oleda.SelectCommand = cmd;

                // Tạo đối tượng DataSet để hứng dữ liệu từ tập tin excel
                DataSet ds = new DataSet();

                // Đổ đữ liệu từ tập excel vào DataSet
  oleda.Fill(ds);

                // Hiển thị dữ liệu đọc từ tập tin excel lên trên GridView
                GridView1.DataSource = ds.Tables[0].DefaultView;
                GridView1.DataBind();
            }
            catch
            {
            }
            finally
            {
                // Đóng chuỗi kết nối
                oledbConn.Close();
            }
        }
    }
}

Bước 5: Build và Run chương trình, thu được kết quả như hình bên dưới:

Hình: kết quả khi chạy chương trình

Ghi chú:

Ở đây Góc Kinh Nghiệm dùng Visual Studio 2010 nên có giao diện trên, nếu bạn dùng khác thì có thể có giao diện khác.

Bạn có thể lấy dữ liệu đọc từ tập tin excel để import vào database, hoặc thao tác tùy ý. Vì dữ liệu giờ đã được đưa vào DataSet.

Góc Kinh Nghiệm chúc các bạn thành công! :lol:


7 comments

      1. Bạn ơi tại sao khi mình áp dụng code như vậy thì nó báo lỗi:
        – The type or namespace name ‘DataSet’ could not be found (are you missing a using directive or an assembly reference?)
        – The type or namespace name ‘OleDbCommand’ could not be found (are you missing a using directive or an assembly reference?)
        – The type or namespace name ‘OleDbDataAdapter’ could not be found (are you missing a using directive or an assembly reference?)
        Mong bạn giúp mình khắc phục nhé,trình độ của mình còn kém nên không biết phải sửa sao :D

        1. Bạn ghê chuột vào chỗ DataSet hoặc OleDbCommand hoặc OleDbDataAdapter -> xuất hiện một cái ô nhỏ nhỏ cuối mỗi từ, bạn lick vào reference của nó.

  1. Xin chào các pro. Em đang làm dự án liên quan đến file excel 2007. Kết nối và hiển thị dữ liệu thì em đã làm được nhưng khi chương trình em chạy thì người khác không thể truy cập vào file excel được. Vậy em nhờ các pro giúp đỡ em cách: chương trình vẫn join vào file excel và em cũng có thể bật file excel lên được, em xin chân thành cảm ơn ạ!

  2. chào bạn. Mình đang quan tâm code của bạn. Mình đã mở được file Excel vào gridview tuy nhiên mình cột code mình chỉ mở được dạng số, nếu vừa số vừa chữ thì không hiển thị.

Leave a Reply

Your email address will not be published. Required fields are marked *