最近因為專案需要將資料會出EXCEL,所以上網找了資料寫出個匯出的功能,並且可以設定每個Sheet的資料數量

首先要 using Microsoft.Office.Interop.Excel;

        /// <summary>
        /// 匯出資料至EXCEL表並分頁
        /// </summary>
        /// <param name="title">EXCEL表的標題</param>
        /// <param name="dt">傳入的datatable</param>
        /// <param name="pages">每頁資料的比數</param>
        /// <returns>1:成功;2:失敗</returns>

public static string Export_Excel(string[] titles, System.Data.DataTable dt, int pages)
        {
                //引用Excel Application類別
                _Application myExcel = null;
                //引用活頁簿類別
                _Workbook myBook = null;
                //引用工作表類別
                _Worksheet mySheet = null;
                //引用Range類別
                Range myRange = null;

                //開啟一個新的應用程式
                myExcel = new Microsoft.Office.Interop.Excel.Application();
                //加入新的活頁簿
                myExcel.Workbooks.Add(true);
                //停用警告訊息
                myExcel.DisplayAlerts = false;
                //讓Excel文件可見
                myExcel.Visible = false;
                //引用第一個活頁簿
                myBook = myExcel.Workbooks[1];
                ////設定活頁簿焦點
                myBook.Activate();             
               

                int total_page = 1, Cell_Range1 = 0;
                string result_msg = "1";
              
                try
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {


                        if (i % pages == 0)
                        {

                            //加入新的工作表在第N張工作表之後
                            myBook.Sheets.Add(Type.Missing, myBook.Worksheets[total_page], 1, Type.Missing);
                            //引用新加入的工作表
                            mySheet = (_Worksheet)myBook.Worksheets[total_page + 1];
                          
                            //命名工作表的名稱
                            mySheet.Name = total_page.ToString();
                            total_page += 1;
                            Cell_Range1 = 0;
                           

                            //寫入Title
                            int title_count = 0;
                            foreach (string title in titles)
                            {
                                myRange = mySheet.get_Range("A1", Type.Missing); myRange.get_Offset(1, title_count).Select();
                                myRange.get_Range(myExcel.Cells[1, 1 + title_count], myExcel.Cells[1, 1 + title_count]).Select();
                                myExcel.Cells[1, 1 + title_count] = "'" + title.ToString();
                                title_count += 1;
                            }


                        }

                        int Cell_Range2 = 0;

                        for (int j = 0; j < dt.Columns.Count; j++)
                        {
                           
                            //myData[i, j] = dt.Rows[i][j].ToString();

                            myRange = mySheet.get_Range("A2", Type.Missing); myRange.get_Offset(Cell_Range1, Cell_Range2).Select();

                            //用Cells寫入陣列資料
                            myRange.get_Range(myExcel.Cells[2 + Cell_Range1, 1 + Cell_Range2], myExcel.Cells[2 + Cell_Range1, 1 + Cell_Range2]).Select();
                            myExcel.Cells[2 + Cell_Range1, 1 + Cell_Range2] = "'" + dt.Rows[i][j].ToString();
                            Cell_Range2 =Cell_Range2 + 1;
                        }

                        Cell_Range1 += 1;
                    }
                   
                    //刪除第一個Sheet
                    mySheet = (_Worksheet)myBook.Worksheets[1];
                    mySheet.Delete();                         
           

                    string PathFile = "C:" + @"\test.xls";

                    //另存活頁簿
                    myBook.SaveAs(PathFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                    //關閉活頁簿
                    myBook.Close(false, Type.Missing, Type.Missing);

                    //關閉Excel
                    myExcel.Quit();
                    //釋放Excel資源
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
                    myBook = null;
                    mySheet = null;
                    myRange = null;
                    myExcel = null;
                    GC.Collect();

                   
                }

                catch (Exception ex)
                {
                    result_msg = "2";
                }

                return result_msg;
        }

全站熱搜
創作者介紹
創作者 Gino 的頭像
Gino

Gino的筆記本

Gino 發表在 痞客邦 留言(0) 人氣()