01/10/2018, 17:29

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 ...

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:


0