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ố 11 kết quả

Đề tài: export dữ liệu từ datagridview ra file excell trong C# 2005

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

    Angry export dữ liệu từ datagridview ra file excell trong C# 2005

    Ủa, mình đã post bài lên hỏi, mà sao ko có ai giúp đỡ vậy!!!
    mình dùng CSDL access, mình đang làm Window Application không phải Web, mình có form1, trong form1 có: datagridview1 và button1, datagridview1 đã load dũ liệu từ 1 table trong CSDL access lên rồi, bây giờ mình muốn nhấn vào button1, thì sẽ xuất dữ liệu trên datagridview1 ra file Excell. Bạn làm ơn chú thích từng câu lệnh, ý nghĩa của câu lệnh là gì được ko? Vì mình mới chỉ bắt đàu học C#, nên hơi khó khăn trong việc đọc Code.
    thanks.

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294


    Lưu ý là lần sau bạn ko được post 2 bài giống nhau như vậy!!!
    Nếu muốn giúp đỡ thì bạn warning trong topic đó để mọi người chú ý.
    Nếu ko thì bạn đừng hỏi tại sao cả 2 nằm trong thùng rác


    Mấy cái này trong codeproject.com thiếu gì. Chỉ cần search export to excel là ra một đống

    Code này là của VB.NET (Vb với C# giống nhau y chang)

    Đầu tiên phải reference excel object vào


    VB.NET Code:
    1. Imports Microsoft.Office.Interop
    2. Imports System.Data
    3. Imports System.Data.SqlClient
    4. Imports System.Windows.Forms
    5.  
    6. Public Class Form1
    7.     ...
    8.     ...
    9.     Private Sub Export_Btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    10.                                  Handles Export_Btn.Click
    11.  
    12.         Dim RowsCount As Int32 = Me.DataGridView1.SelectedRows.Count - 1
    13.  
    14.         If RowsCount > -1 Then
    15.             'The array for field names.
    16.             Dim FldNames() As String = {"ID", "Company", "City", "Region", "Country"}
    17.             'The array for the selected records.
    18.             Dim DataArr(RowsCount, 4) As Object
    19.             Dim ColsCounter As Int32 = 0
    20.  
    21.             'Populate the data array - The list is sorted in ascending order.
    22.             For RowsCounter As Int32 = 0 To RowsCount
    23.                 For Each cell As DataGridViewCell In Me.DataGridView1 _
    24.                                                      .SelectedRows(RowsCount - RowsCounter) _
    25.                                                      .Cells
    26.                     DataArr(RowsCounter, ColsCounter) = cell.Value
    27.                     ColsCounter = ColsCounter + 1
    28.                 Next
    29.                 ColsCounter = 0
    30.             Next
    31.  
    32.             'Populate the data array - The list is sorted in descending order.
    33.             'Dim Rows As Int32 = 0
    34.             'For Each row As DataGridViewRow In Me.DataGridView1.SelectedRows
    35.             'For Each cell As DataGridViewCell In Me.DataGridView1.SelectedRows(Rows).Cells
    36.             'DataArr(Rows, ColsCounter) = cell.Value
    37.             'ColsCounter = ColsCounter + 1
    38.             'Next
    39.             'ColsCounter = 0
    40.             'Rows = Rows + 1
    41.             'Next
    42.  
    43.             'Variables for Excel.
    44.             Dim xlApp As New Excel.Application
    45.             Dim xlWBook As Excel.Workbook = xlApp.Workbooks.Add( _
    46.                                             Excel.XlWBATemplate.xlWBATWorksheet)
    47.             Dim xlWSheet As Excel.Worksheet = CType(xlWBook.Worksheets(1), Excel.Worksheet)
    48.             Dim xlCalc As Excel.XlCalculation
    49.  
    50.             'Save the present setting for Excel's calculation mode and turn it off.
    51.             With xlApp
    52.                 xlCalc = .Calculation
    53.                 .Calculation = Excel.XlCalculation.xlCalculationManual
    54.             End With
    55.  
    56.             'Write the field names and the data to the targeting worksheet.
    57.             With xlWSheet
    58.                 .Range(.Cells(1, 1), .Cells(1, 5)).Value = FldNames
    59.                 .Range(.Cells(2, 1), .Cells(RowsCount + 2, 5)).Value = DataArr
    60.                 .UsedRange.Columns.AutoFit()
    61.             End With
    62.  
    63.             With xlApp
    64.                 .Visible = True
    65.                 .UserControl = True
    66.                 'Restore the calculation mode.
    67.                 .Calculation = xlCalc
    68.             End With
    69.  
    70.             'Relase objects from memory.                        
    71.             xlWSheet = Nothing
    72.             xlWBook = Nothing
    73.             xlApp = Nothing
    74.             GC.Collect()
    75.         End If
    76.  
    77.     End Sub
    78. End Class

    Code trên sẽ bung của sổ Office Excell và có dữ liệu trên đó.

    Để ẩn cửa sổ thì dùng:

    VB.NET Code:
    1. Dim xlWBook As Excel.Workbook = xlApp.Workbooks.Add()
    2. ...
    3. ...
    4. ' Ghi dữ liệu
    5. ...
    6. ...
    7. xlApp.visible = false
    8. xlWBook.SaveAs(strFileName, Excel.XlFileFormat.xlWorkbookNormal)
    9.  
    10. Và quan trọng là
    11. xlApp.quit()
    12. Để giải phóng Process "excel.exe"
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 18-11-2008 lúc 11:42 PM.

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

    ZCoder87 ơi, bạn có thể giải thích giúp mình ye nghĩa của từng câu lệnh trong đoạn code bạn cho ko? vì mình mới học C# , nên cũng ko hiểu cho lắm. Nhất là phần code bên Excell, có những từ khóa mà mình ko hiểu.
    thanks bạn nhiều!!!

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

    Code này là VB.net mà zời ^^!

    Đọc cái này nghĩ là C# sao ^^!
    Is the moon rising...

  5. #5
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    2 lần post đều 2 lần nhắc nhở.
    - Diễn đàn có sẵn chức năng gõ tiếng Việt. Lần sau nên chú ý lần sau...


    Để làm việc với Excel như trên là do ở đây bạn đang sử dụng đối tượng dạng COM của chương trình excel.exe.

    COM là một đối tượng đóng gói theo 1 chuẩn do MS định ra và nó có khả năng chạy được trên nhiều nền tảng ví dụ như: Win32, .NET và kể cả Script bằng JS hay VBS của Web Browser hay trên Server như PHP, ASP, ASP.NET... và nó cũng là nền móng của virus nhiễm qua mạng!

    Vậy việc đầu tiên bạn phải reference COM excel object vào project như sau:


    Và kết nối using namespace
    Visual C# Code:
    1. using COMExcel = Microsoft.Office.Interop.Excel;

    Đối tượng COM của excel này bao gồm:
    - Application (chương trình excel)
    - Workbook (file xls làm việc, có nhiều workbook trong app)
    - Worksheet (có nhiều worksheet trong workbook)

    Như vậy sau đó
    Visual C# Code:
    1. // Khởi động chtr Excell
    2. COMExcel.Application exApp = new COMExcel.Application();
    3.  
    4. // Thêm file temp xls
    5. COMExcel.Workbook exBook = exApp.Workbooks.Add(
    6.           COMExcel.XlWBATemplate.xlWBATWorksheet );
    7.  
    8. // Lấy sheet 1.
    9. COMExcel.Worksheet exSheet = (COMExcel.Worksheet)exBook.Worksheets[1];


    Thay vì tạo 1 file Temp excel thì mình cũng có thể mở 1 file excel có sẵn
    Visual C# Code:
    1. string workbookPath = "c:/SomeWorkBook.xls";
    2.  
    3. COMExcel.Workbook exBook = exApp.Workbooks..Open(workbookPath,
    4.         0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
    5.         true, false, 0, true, false, false);

    Sau đó nếu mình sử dụng:
    Visual C# Code:
    1. exSheet.Activate();
    2. exSheet.Name = "Export Data Sheet";

    Thì sheet của Excel sẽ như sau:



    Tiếp tục là Range (nó là một khối ô select, nó cũng có thể chỉ là 1 ô)

    Như vậy để ghi dữ liệu lên Ô thứ (A1) thì chúng ta sẽ làm như sau:

    Visual C# Code:
    1. // Range là ô [1,1] (A1)
    2. COMExcel.Range r = (COMExcel.Range) exSheet.Cells[1, 1];
    3.  
    4. // Ghi dữ liệu
    5. r.Value2 = "Demo excel value";
    6.  
    7. // Giãn cột
    8. r.Columns.AutoFit();
    9.  
    10. // Hiển thị chương trình excel
    11. exApp.Visible = true;
    12.  
    13. // Đóng chương trình excel
    14. Console.WriteLine("Wait to excel.exe");
    15. Console.ReadLine();
    16. exApp.Quit();

    Hoặc bạn cũng có thể làm việc theo 1 khối như sau:

    Visual C# Code:
    1. COMExcel.Range r = (COMExcel.Range)exSheet.get_Range("A1", "A4");
    2. r.Value2 = "My Value";            
    3. r.Columns.AutoFit();

    Đây là kết quả


    Công việc cuối cùng là save file nếu như bạn ko muốn hiện cửa sổ

    Visual C# Code:
    1. // Ẩn chương trình
    2. exApp.Visible = false;    
    3.  
    4. // Save file
    5. exBook.SaveAs("C:\\file.xls", COMExcel.XlFileFormat.xlWorkbookNormal,
    6.                 null,null,false,false,
    7.                 COMExcel.XlSaveAsAccessMode.xlExclusive,
    8.                 false,false,false,false,false);
    9. exApp.Quit();

    Tham khảo thêm...

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

    Mặc định export dữ liệu từ datagridview ra file excell trong C# 2005

    mình cảm ơn. bạn cho mình hỏi là mình đã đưa dữ liệu từ lưới ra file excel được rồi. Nhưng khi mình lưu file excel lại rồi, thì form của mình nó bị đứng luôn, form ko chạy nữa, nó báo lồi là Not Respoint gì đó. cho mình hỏi, lỗi đó là lỗi gì.thanks!!!

  7. #7
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Nó bị Not Response là đúng rồi. Vì lúc này chương trình đang chờ process excel.exe chạy, lỗi có thể là do tiến trình này ko được thoát..

    Vậy thì đừng cho hiện cửa sổ Excel lên. Để nó visible = false. Sau đó quit() rồi release.

    Muốn chắc ăn hơnt hì thêm đoạn code khử đối tượng COM này.

    Visual C# Code:
    1. exBook.Close(false, Path, false);
    2. exApp.Quit();
    3. System.Runtime.InteropServices.Marshal.ReleaseCOMObject(exBook);
    4. System.Runtime.InteropServices.Marshal.ReleaseCOMObject(exApp);

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

    các bác giúp em xuất dữ liệu từ database sql ra excel với ngôn ngữ c#,cám ơn nhiều

  9. #9
    Ngày gia nhập
    04 2010
    Nơi ở
    Hà Nội
    Bài viết
    278
    Sống trên đời cần có một tấm lòng để ...gió cuốn đi !

  10. #10
    Ngày gia nhập
    02 2011
    Bài viết
    11

    Trích dẫn Nguyên bản được gửi bởi ZCoder87 Xem bài viết
    [COLOR=Red]
    Thay vì tạo 1 file Temp excel thì mình cũng có thể mở 1 file excel có sẵn
    Visual C# Code:
    1. string workbookPath = "c:/SomeWorkBook.xls";
    2.  
    3. COMExcel.Workbook exBook = exApp.Workbooks..Open(workbookPath,
    4.         0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
    5.         true, false, 0, true, false, false);
    mình muốn tạo 1 file temp excel mới thì làm sao vậy bạn

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

  1. Lưu dữ liệu tiếp tục ra file excell trong winform như thế nào ?
    Gửi bởi stalinz trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 19-02-2012, 09:39 PM
  2. ADO.NET làm sao xuất Crystyal report ra excell và file excell này tự chạy ???
    Gửi bởi lonelyeveningstar trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 10-02-2012, 12:16 AM
  3. ADO.NET Kiểm tra dữ liệu trùng khi load file excell vào datagridview như thế nào ?
    Gửi bởi lonelyeveningstar trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 9
    Bài viết cuối: 06-01-2012, 07:41 PM
  4. Định dạng khi Export Excell trong C# như thế nào???
    Gửi bởi hoangtk6 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 05-01-2012, 06:44 PM
  5. Database Hướng dẫn Import và Export cơ sở dữ liệu trong SQL Sever 2005
    Gửi bởi doituyetdep trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 15-06-2011, 03:04 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