Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Thao tác với Excel trong C# như thế nào ?

  1. #1
    Ngày gia nhập
    02 2008
    Bài viết
    2

    Mặc định Thao tác với Excel trong C# như thế nào ?

    Bạn nào biết cách truy xuất dữ liệu trong Excel ko chỉ cho tôi với.
    Cách truyển dữ liệu từ trong Excel vào SQL Sever

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    79

    Nhiều người hỏi về vấn đề này. Trước hết, các bạn lưu ý mấy điểm sau:

    - Nên nói rõ đang làm việc với Excel phiên bản nào? Office 2003 chẳng hạn thì sẽ load thư viện Excel 11 (Project \ Add Reference sau đó chọn Tab COM, kéo xuống tìm Microsoft Excel 11.0 Object Library)

    - Thường khi nói đến Import/Export Excel với Database có nghĩa là sẽ làm việc với file dạng .CSV (mặc định dấu ngăn cách các giá trị là dấu phẩy) hoặc .TXT (MS DOS txt ngăn cách bằng dấu Tab). Dùng .TXT (dấu Tab) sẽ tiện hơn, thậm chí muốn đổi đuôi file thành .CSV, Excel vẫn hiểu.

    Ý tưởng của việc Import/Export là: Dùng một DataTable làm trung gian, sau đó duyệt qua tất cả các dòng và cột để lấy giá trị đưa ra Excel Sheet hoặc insert vào Table trong Database.

    Khi đã load thư viện Excel vào Visual Studio, các bước tiếp theo cụ thể như sau:

    1. Khai báo các Namespace sẽ sử dụng (khai báo cả trên Form và cả trong Class tự tạo cho chắc ăn):
    PHP Code:
    using Excel;
    using System.IO;
    using System.Data.Odbc
    2. Export và gọi Excel lên đơn giản hơn. Đoạn code dưới đây giả định rằng bạn đã có nút button1 trên form và dataset đã được fill đầy dữ liệu lấy ra từ Database.
    PHP Code:
    DataSet dataset = new DataSet();

    private 
    void button1_Click(object senderEventArgs e)
            {
                try
                {
                    
                    
    Excel.ApplicationClass excel = new Excel.ApplicationClass();

                    
    excel.Application.Workbooks.Add(true);

                    
    System.Data.DataTable table dataset.Tables[0];
                    
    int ColumnIndex 0;
                    foreach (
    System.Data.DataColumn col in table.Columns)
                        
                    {
                        
    ColumnIndex++;
                        
    excel.Cells[1ColumnIndex] = col.ColumnName;
                  } 
    int rowIndex 0;
                    foreach (
    DataRow row in table.Rows)
                    {
                        
    rowIndex++;
                        
    ColumnIndex 0; foreach (DataColumn col in table.Columns)
                        {
                            
    ColumnIndex++;
                            
    excel.Cells[rowIndex 1ColumnIndex] = row[col.ColumnName];
                        }
                    }

                    
    excel.Visible true;

                    
    Excel._Worksheet worksheet = (Excel._Worksheet)excel.ActiveSheet;

                    
    //worksheet.Activate();
                    
    worksheet.Activate();


                }
                catch (
    Exception exml)
                {
                    
    // catch an xmlexception errors
                    
    MessageBox.Show(exml.Message);
                }
            } 

  3. #3
    Ngày gia nhập
    11 2007
    Bài viết
    79

    3. Import phức tạp hơn một chút. Đoạn code dưới đây giả định rằng bạn đã có đường dẫn đầy đủ của file .CSV (hoặc .TXT ) với các chuỗi giá trị được ngăn cách nhau bằng dấu Tab (ví dụ: AAA BBB CCC) được lưu trong biến strFile. Class clsImport được tạo ra để chứa các thủ tục cho việc Import. Ba thủ tục đầu tiên trong Class dùng để lấy dữ liệu vào một DataTable tạm; thủ tục thứ tư dùng để đổ dữ liệu từ DataTable này vào Database.

    PHP Code:
    private void button2_Click(object senderEventArgs e)
            {
                
    clsImport tmpImport = new clsImport();
                try
                {    
                
    //Mo file    
                    
    Stream strm File.Open(strFileFileMode.Open);
                    
    //Dua du lieu tu file.CSV (hoac file.TXT) vao class clsImport de do vao mot Datatable tam
    tmpImport.PopulateDataTableFromUploadedFile(strm);
               

                    
    //do du lieu tu datatable vao mot Datagridview tren form, muc dich de theo doi xem du lieu tu file .CSV co format dung chua
                    
    dataGridView1.DataSource tmpImport.m_dtCSV;
                    
    dataGridView1.Update();

    //Truyen du lieu vao Database
                    
    tmpImport.InsertDB();
                    
                    
                }
                catch(
    Exception ee)
                {
                    
    MessageBox.Show(ee.Message.ToString(),"Error Info");
                }
            } 

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    79

    4. Như vậy, đã có một DataTable tạm chứa dữ liệu được load từ file Excel. DataTable này là đối tượng trung gian quan trọng nhất: Nó được dùng để lấy dữ liệu từ file vào, sau đó đổ lên dataGridview để kiểm tra (có thể bỏ đoạn này nếu muốn), nếu dữ liệu hiện ra trên Grid đúng thì sẽ làm động tác cuối cùng là đổ dữ liệu vào Database bằng cách dùng câu SQL Insert quen thuộc (thủ tục thứ tư).
    PHP Code:
    class clsImport
        
    {    
            
    //Khai bao mot Datatable de dung chung
            
    public DataTable m_dtCSV = new DataTable();        
            public 
    Int32 m_iColumnCount 0;




        
    //Thu tuc thu 1 (tao ra mot DataTable tam co dinh dang giong het file Excel)
            
    public void PopulateDataTableFromUploadedFile(System.IO.Stream strm)
            {
                
    System.IO.StreamReader srdr = new System.IO.StreamReader(strm);
                
    String strLine String.Empty;
                
    Int32 iLineCount 0;
                
                do
                {
                    
    strLine srdr.ReadLine();
                    if (
    strLine == null)
                    {
                        break;
                    }
                    if (
    == iLineCount++)
                    {
                        
    m_dtCSV this.CreateDataTableForCSVData(strLine);
                    }
                    
    this.AddDataRowToTable(strLinem_dtCSV);
                } while (
    true);
            }




            
    //Thu tuc thu 2 (duoc goi boi 1)
            
    private DataTable CreateDataTableForCSVData(String strLine)
            {
                
    DataTable dt = new DataTable("CSVTable");
                
    String[] strVals strLine.Split(new char[] { '\t' });
                
    Int32 m_iColumnCount strVals.Length;
                
    int idx 0;
                foreach (
    String strVal in strVals)
                {
                    
    idx++;
                    
    String strColumnName "Column" Convert.ToString(idx);
                    
    dt.Columns.Add(strColumnNameType.GetType("System.String"));
                }
                return 
    dt;
            }





            
    //Thu tuc thu 3 (duoc goi boi 1)
            
    private DataRow AddDataRowToTable(String strCSVLineDataTable dt)
            {

                
    String[] strVals strCSVLine.Split(new char[] { '\t' });           
                
    Int32 iTotalNumberOfValues strVals.Length;
                 
    int idx 0;
                
    DataRow drow dt.NewRow();
                foreach (
    String strVal in strVals)
                {
                    
    //String strColumnName = String.Format("Column-{0}", idx++);
                    
    idx++;
                    
    String strColumnName "Column" Convert.ToString(idx);
                    
    drow[strColumnName] = strVal.Trim().ToString();
                }
                
    dt.Rows.Add(drow);
                return 
    drow;
            }





    //Thu tuc thu 4 (Insert du lieu tu DataTable vao Database co ten la Test, co bang Project_Library)
    public void InsertDB() // insert manually into Project_Library
            
    {
                try
                {
                    
    SqlConnection con1 = new SqlConnection("Data Source=.;Initial Catalog=Test;Integrated Security=True");
                    
    SqlCommand cmd = new SqlCommand();
                    
    SqlCommand cmd1 = new SqlCommand();
                    
    cmd.Connection con1;
                    
    cmd.CommandType CommandType.Text;


                    
    con1.Open();
                    for (
    int i 0<= m_dtCSV.Rows.Count-1i++) //Dong
                    
    {
                        
    int j 0//Cot 
                        
    {
                            
    cmd.CommandText "Insert into Project_Library (Temp1,Temp2,Temp3,Temp4,Temp5) values ('" m_dtCSV.Rows[i].ItemArray.GetValue(j) + "','" m_dtCSV.Rows[i].ItemArray.GetValue(+= 1) + "','" m_dtCSV.Rows[i].ItemArray.GetValue(+= 1) + "','" m_dtCSV.Rows[i].ItemArray.GetValue(+= 1) + "','" m_dtCSV.Rows[i].ItemArray.GetValue(+= 1) + "')";
                                           
                         }
                         
    cmd.ExecuteNonQuery();
               
                    }
                    
    con1.Close();
                }
                catch (
    Exception ex)
                {
                    
    MessageBox.Show(ex.Message"Error Info");
                }
            } 
    Đã được chỉnh sửa lần cuối bởi ccom : 18-02-2008 lúc 08:28 PM.

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    79

    Chú ý:

    1. Lỗi thường gặp nhất trong việc Import/Export Excel là lỗi định dạng của file nguồn (một hoặc vài dòng chứa ký tự đặc biệt dẫn đến dòng/cột bị loạn). Kiểm tra bằng cách load file nguồn có một dòng duy nhất với định dạng chuẩn, nếu thành công thì tìm và sửa lại các dòng khác theo đúng template đó.

    2. Tut này có mục đích tham khảo chứ không viết cho bất cứ một trường hợp cụ thể nào nên khi copy/paste để chạy có thể phát sinh lỗi. Các bạn phải tự đọc hiểu code và sửa lại cho phù hợp với project của mình.

    Cheers,
    ccom

    Phải bổ sung thêm cái này. Trong quá trình debug chắc chắn sẽ có những thiếu sót kiểu này, các bạn tự bổ sung thêm.

    PHP Code:
    using System.Data.SqlClient
    Đã được chỉnh sửa lần cuối bởi nhc1987 : 19-02-2008 lúc 03:03 PM. Lý do: merge posts

  6. #6
    Ngày gia nhập
    02 2008
    Bài viết
    2

    Mặc định Thao tác với Excel trong C# như thế nào ?

    Thanks you

  7. #7
    Ngày gia nhập
    03 2008
    Bài viết
    1

    Cảm ơn các bạn rất nhiều, tôi đã thử code rồi, và lỗi chỉ ra là ở định dạng file Excel và cấu trúc bảng cần insert trong database, có thể cho tôi một ví dụ về cấu trúc file Excel và cấu trúc bảng trong database được không? cảm ơn các bạn rât nhiều.

  8. #8
    Ngày gia nhập
    02 2008
    Bài viết
    1

    Thanks bác nhiều nhé,

  9. #9
    Ngày gia nhập
    09 2008
    Bài viết
    1

    Thank so much

  10. #10
    Ngày gia nhập
    03 2010
    Bài viết
    1

    thế ngược lại thì sao các bác. ví dụ là đưa cơ sở dữ liệu từ sql vào excel thì làm sao các bác. chỉ em với

Các đề tài tương tự

  1. lấy dữ liệu từ excel vào trong C# như thế nào?
    Gửi bởi minhvirut trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 21-12-2014, 08:41 PM
  2. Format dữ liệu trong chương trình ra file Excel như thế nào ?
    Gửi bởi rukawa1184 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 02-11-2011, 08:08 AM
  3. làm thế nào in file excel trong lập trình VC++?
    Gửi bởi kidteam trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 15-01-2011, 07:31 PM
  4. Làm thế nào để lấy dữ liệu trong file Excel
    Gửi bởi quockhanh.K94 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 06-12-2010, 06:46 AM
  5. Đọc ghi file Excel | Truy xuất Excel, như thế nào?
    Gửi bởi khacthuy trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 5
    Bài viết cuối: 01-04-2009, 08:54 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn