2012-11-26 31 views
5

Tôi cố gắng để sao chép dữ liệu DataGridView sang Excel và tôi đang sử dụng mã này:Cách đơn giản để Xuất DataGridView sang Excel

public static void ExportToExcel(DataGridView dgView) 
{ 
    Microsoft.Office.Interop.Excel.Application excelApp = null; 

    try 
    { 
     // instantiating the excel application class 
     object misValue = System.Reflection.Missing.Value; 
     excelApp = new Microsoft.Office.Interop.Excel.Application(); 
     Microsoft.Office.Interop.Excel.Workbook currentWorkbook = excelApp.Workbooks.Add(Type.Missing); 
     Microsoft.Office.Interop.Excel.Worksheet currentWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)currentWorkbook.ActiveSheet; 

     currentWorksheet.Columns.ColumnWidth = 18; 

     if (dgView.Rows.Count > 0) 
     { 
      currentWorksheet.Cells[1, 1] = DateTime.Now.ToString("s"); 
      int i = 1; 

      foreach (DataGridViewColumn dgviewColumn in dgView.Columns) 
      { 
       // Excel work sheet indexing starts with 1 
       currentWorksheet.Cells[2, i] = dgviewColumn.Name; 
       ++i; 
      } 

      Microsoft.Office.Interop.Excel.Range headerColumnRange = currentWorksheet.get_Range("A2", "G2"); 
      headerColumnRange.Font.Bold = true; 
      headerColumnRange.Font.Color = 0xFF0000; 

      //headerColumnRange.EntireColumn.AutoFit(); 
      int rowIndex = 0; 

      for (rowIndex = 0; rowIndex < dgView.Rows.Count; rowIndex++) 
      { 
       DataGridViewRow dgRow = dgView.Rows[rowIndex]; 

       for (int cellIndex = 0; cellIndex < dgRow.Cells.Count; cellIndex++) 
       { 
        currentWorksheet.Cells[rowIndex + 3, cellIndex + 1] = dgRow.Cells[cellIndex].Value; 
       } 
      } 

      Microsoft.Office.Interop.Excel.Range fullTextRange = currentWorksheet.get_Range("A1", "G" + (rowIndex + 1).ToString()); 
      fullTextRange.WrapText = true; 
      fullTextRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft; 
     } 
     else 
     { 
      string timeStamp = DateTime.Now.ToString("s"); 
      timeStamp = timeStamp.Replace(':', '-'); 
      timeStamp = timeStamp.Replace("T", "__"); 
      currentWorksheet.Cells[1, 1] = timeStamp; 
      currentWorksheet.Cells[1, 2] = "No error occured"; 
     } 

     using (SaveFileDialog exportSaveFileDialog = new SaveFileDialog()) 
     { 
      exportSaveFileDialog.Title = "Select Excel File"; 
      exportSaveFileDialog.Filter = "Microsoft Office Excel Workbook(*.xlsx)|*.xlsx"; 

      if (DialogResult.OK == exportSaveFileDialog.ShowDialog()) 
      { 
       string fullFileName = exportSaveFileDialog.FileName; 
       // currentWorkbook.SaveCopyAs(fullFileName); 
       // indicating that we already saved the workbook, otherwise call to Quit() will pop up 
       // the save file dialogue box 

       currentWorkbook.SaveAs(fullFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook, System.Reflection.Missing.Value, misValue, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlUserResolution, true, misValue, misValue, misValue); 
       currentWorkbook.Saved = true; 
       MessageBox.Show("Exported successfully", "Exported to Excel", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
    finally 
    { 
     if (excelApp != null) 
     { 
      excelApp.Quit(); 
     } 
    } 
} 

Nhưng khi có hơn 200 000 hồ sơ, lấy nó một thời gian dài để xuất khẩu. Có cách nào nhanh hơn để thực hiện việc này không?

+0

các liên kết này có thể giúp bạn: [link1] (http://stackoverflow.com/a/11742908/1135581) và [link2] (http://www.codeproject.com/Articles/19284/ Export-large-data-from-Gridview-and-Datareader-to) – Rahul

Trả lời

7

Hãy thử mã này. Nó nhanh hơn so với các phương pháp interop bình thường, nó cũng chuyển đổi thành CSV có thể được đọc dễ dàng bởi excel.

int cols; 
//open file 
StreamWriter wr = new StreamWriter("GB STOCK.csv"); 

//determine the number of columns and write columns to file 
cols = dgvStock.Columns.Count; 
for (int i = 0; i < cols - 1; i++) 
{ 
    wr.Write(dgvStock.Columns[i].Name.ToString().ToUpper() + ","); 
} 
wr.WriteLine(); 

//write rows to excel file 
for (int i = 0; i < (dgvStock.Rows.Count - 1); i++) 
{ 
    for (int j = 0; j < cols; j++) 
    { 
     if (dgvStock.Rows[i].Cells[j].Value != null) 
     { 
      wr.Write(dgvStock.Rows[i].Cells[j].Value + ","); 
     } 
     else 
     { 
      wr.Write(","); 
     } 
    } 

    wr.WriteLine(); 
} 

//close file 
wr.Close(); 
+0

Mã đặt mọi hàng vào ô 1 excell (MSVS 2005, .net2). – Vadim

-2

Cách xuất dữ liệu GridView thành excel trong asp.net trong C#. chi tiết khác click here

+3

Lưu ý rằng [câu trả lời chỉ có liên kết] (http://meta.stackoverflow.com/tags/link-only-answers/info) không được khuyến khích, các câu trả lời SO phải là điểm kết thúc của việc tìm kiếm giải pháp (so với nhưng một điểm dừng khác của tài liệu tham khảo, mà có xu hướng để có được cũ theo thời gian). Vui lòng xem xét thêm bản tóm tắt độc lập tại đây, giữ liên kết dưới dạng tham chiếu. – kleopatra

+0

hello sir kiểm tra liên kết này nó là câu trả lời của câu hỏi đó – Jquery

+0

hello thưa bà, đọc liên kết trong bình luận cuối cùng của tôi :-) – kleopatra

Các vấn đề liên quan