C#手記 DataSet 或DataTable導出至Excel

 

在網上搜得,自己修改了一下拿來用了,記錄一下,方便其他朋友用

/*gridView1 是form中的控件,數據源就是myTable

*/ 

 

public void ExportDataToExcel(  DataTable myTable)
        {
            try
            {
                Excel.Application xlApp = new Excel.ApplicationClass();

                int rowIndex;
                int colIndex;

                rowIndex = 2;
                colIndex = 0;

                Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
              

             //之前用的DataGrid控件,如果有設定樣式可以放開這裏
               /* if (gridView1.PrintStyles .Count  > 0)
                {
                    Excel.Range range = xlApp.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, grid.TableStyles[0].GridColumnStyles.Count]);
                    range.MergeCells = true;
                    // xlApp.ActiveCell.FormulaR1C1 = ReportTitle;
                    xlApp.ActiveCell.Font.Size = 18;
                    xlApp.ActiveCell.Font.Bold = true;

                    foreach (DataGridColumnStyle colu in grid.TableStyles[0].GridColumnStyles)
                    {
                        colIndex = colIndex + 1;
                        xlApp.Cells[2, colIndex] = colu.HeaderText;
                    }

                    int k = 0;
                    //得到的表所有行,賦值給單元格

                    for (int row = 0; row < myTable.Rows.Count; row++)
                    {
                        rowIndex = rowIndex + 1;
                        colIndex = 0;
                        for (int col = 0; col < grid.TableStyles[0].GridColumnStyles.Count; col++)
                        {
                            colIndex = colIndex + 1;
                            xlApp.Cells[rowIndex, colIndex] = myTable.Rows[row][col].ToString();

                            k++;
                            if (k >= 500)
                            {
                                Application.DoEvents();  //此舉爲了提高性能
                                k = 0; //歸零
                            }
                        }
                    }
                }
                else
                {*/
                    Excel.Range range = xlApp.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, myTable.Columns.Count]);
                    range.MergeCells = true;
                   // xlApp.ActiveCell.FormulaR1C1 = ReportTitle;
                    xlApp.ActiveCell.Font.Size = 18;
                    xlApp.ActiveCell.Font.Bold = true;

                    //將表中的欄位名稱填到Excel的第一行

                    foreach (GridColumn Col in gridView1.Columns)
                    {
                        colIndex = colIndex + 1;
                        xlApp.Cells[2, colIndex] = Col.FieldName;
                    }

                    //得到的表所有行,賦值給單元格

                    for (int row = 0; row < myTable.Rows.Count; row++)
                    {
                        rowIndex = rowIndex + 1;
                        colIndex = 0;
                        for (int col = 0; col < myTable.Columns.Count; col++)
                        {
                            colIndex = colIndex + 1;
                            xlApp.Cells[rowIndex, colIndex] = myTable.Rows[row][col].ToString();
                        }
                    }
              //  }

                xlApp.get_Range(xlApp.Cells[2, 1], xlApp.Cells[2, colIndex]).Font.Bold = true;
                xlApp.get_Range(xlApp.Cells[2, 1], xlApp.Cells[rowIndex, colIndex]).Borders.LineStyle = 1;

                xlApp.Cells.EntireColumn.AutoFit();
                xlApp.Cells.VerticalAlignment = Excel.Constants.xlCenter;
                xlApp.Cells.HorizontalAlignment = Excel.Constants.xlCenter;


                xlApp.Visible = true;
            }
            catch (Exception e)
            {
                throw e;
            }
        }
    }

 

效果大體如下:

 

導出:2千筆數據大約15秒導完

 

---------------------------------

廣告:俺的淘寶小店,賺點零花錢,請大家支持:http://lovehealthylife.taobao.com 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章