[C#]WinForm中DataGrid擴充 – 快速匯出Excel檔案 (1)(續)

來源:互聯網
上載者:User

經過對Excel深入瞭解,採用資料寫入到range的方法,效率更高,更明顯;與常用的逐儲存格寫有所不同,可查看[C#]WinForm中DataGrid擴充 - 匯出Excel檔案 (1)

本例的實現方式以[C#]WinForm中DataGrid擴充 - 匯出Excel檔案 (1)相似。

 1public bool ExportExcel(string p_ReportName)
 2        {
 3            if ( this.TableStyles.Count == 0 ) return false;
 4            DataGridTableStyle ts = this.TableStyles[0];
 5
 6            // 建立Excel對象                    --LeeWenjie    2006-11-29
 7            Excel.Application xlApp = new Excel.ApplicationClass();
 8            if ( xlApp == null )
 9            {
10                MessageBox.Show("Excel無法啟動");
11                return false;
12            }
13            // 建立Excel工作薄
14            Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
15            Excel.Worksheet xlSheet = (Excel.Worksheet)xlBook.Worksheets[1];
16            
17            // 設定標題
18            Excel.Range range = xlSheet.get_Range(xlApp.Cells[1,1],xlApp.Cells[1,ts.GridColumnStyles.Count]);
19            range.MergeCells = true;
20            xlApp.ActiveCell.FormulaR1C1 = p_ReportName;
21            xlApp.ActiveCell.Font.Size = 20;
22            xlApp.ActiveCell.Font.Bold = true;
23            xlApp.ActiveCell.HorizontalAlignment = Excel.Constants.xlCenter;
24
25            // 列索引,行索引,總列數,總行數
26            int colIndex = 0;
27            int RowIndex = 0;
28            int colCount = ts.GridColumnStyles.Count;
29            int RowCount = this.BindingContext[this.DataSource,this.DataMember].Count;
30
31            // 建立快取資料
32            object[,] objData = new object[RowCount + 1, colCount ];
33            // 擷取欄位標題
34            foreach(DataGridColumnStyle cs in ts.GridColumnStyles)
35            {
36                objData[RowIndex,colIndex++] = cs.HeaderText;    
37            }            
38            // 擷取資料
39            for(RowIndex =1;RowIndex< RowCount;RowIndex++)
40            {
41                for(colIndex=0;colIndex < colCount;colIndex++)
42                {
43                    objData[RowIndex,colIndex] = this[RowIndex-1,colIndex];
44                }
45                Application.DoEvents();
46            }
47            // 寫入Excel
48            range = xlSheet.get_Range(xlApp.Cells[2,1],xlApp.Cells[RowCount,colCount]);            
49            range.Value2 = objData;
50
51            // 儲存
52            try
53            {
54                xlBook.Saved  = true;
55                xlBook.SaveCopyAs("D://Fly" + DateTime.Now.ToString("yyyyMMdd") + ".xls");
56            }
57            catch
58            {
59                MessageBox.Show("儲存出錯,請檢查!");
60                return false;
61            }
62            finally
63            {
64                xlApp.Quit();
65                GC.Collect();
66            }
67            return true;
68        }

開發環境:
VS.Net 2003

改進後,效率提高N倍,8000條資料大約需要2秒。

 

**************************************
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.