1. 程式人生 > >c# winform DataGridView匯出資料到Excel中,可以匯出當前頁和全部資料

c# winform DataGridView匯出資料到Excel中,可以匯出當前頁和全部資料

關鍵字: datagridview 匯出 資料 excel 當前頁 全部

準備工作就是可以分頁的DataGridView,和兩個按鈕,一個用來匯出當前頁資料到Excel,一個用來匯出全部資料到Excel

沒有使用SaveFileDialog,但卻可以彈出儲存對話方塊來

先做匯出當前頁資料到Excel的

DataGridView命名為dataGridView1
C#程式碼
  1. #region 匯出當前頁到Excel中
  2. //按下匯出按鈕
  3. privatevoid button7_Click(object sender, EventArgs e)   
  4. {   
  5.     print(dataGridView1);   
  6. }   
  7. publicvoid print(DataGridView dataGridView1)   
  8. {   
  9. //匯出到execl
  10. try
  11.     {   
  12. //沒有資料的話就不往下執行
  13. if (dataGridView1.Rows.Count == 0)   
  14. return;   
  15. //例項化一個Excel.Application物件
  16.         Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();   
  17. //讓後臺執行設定為不可見,為true的話會看到開啟一個Excel,然後資料在往裡寫
  18.         excel.Visible = false;   
  19. //新增加一個工作簿,Workbook是直接儲存,不會彈出儲存對話方塊,加上Application會彈出儲存對話方塊,值為false會報錯
  20.     excel.Application.Workbooks.Add(true);                 
  21. //生成Excel中列頭名稱
  22. for (int i = 0; i < dataGridView1.Columns.Count; i++)   
  23.         {   
  24.             excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;   
  25.         }   
  26. //把DataGridView當前頁的資料儲存在Excel中
  27. for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)   
  28.         {   
  29. for (int j = 0; j < dataGridView1.Columns.Count; j++)   
  30.             {   
  31. if (dataGridView1[j, i].ValueType == typeof(string))   
  32.                 {   
  33.                     excel.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();   
  34.                 }   
  35. else
  36.                 {   
  37.                     excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();   
  38.                 }   
  39.             }   
  40.         }   
  41. //設定禁止彈出儲存和覆蓋的詢問提示框
  42.         excel.DisplayAlerts = false;   
  43.         excel.AlertBeforeOverwriting = false;   
  44. //儲存工作簿
  45.         excel.Application.Workbooks.Add(true).Save();   
  46. //儲存excel檔案
  47.         excel.Save("D:" + "//KKHMD.xls");   
  48. //確保Excel程序關閉
  49.         excel.Quit();   
  50.         excel = null;   
  51.     }   
  52. catch (Exception ex)   
  53.     {   
  54.         MessageBox.Show(ex.Message, "錯誤提示");   
  55.     }   
  56. }  
  57. #endregion C#程式碼 複製程式碼
    1. #region 匯出當前頁到Excel中
    2. //按下匯出按鈕
    3. privatevoid button7_Click(object sender, EventArgs e)   
    4. {   
    5.     print(dataGridView1);   
    6. }   
    7. publicvoid print(DataGridView dataGridView1)   
    8. {   
    9. //匯出到execl
    10. try
    11.     {   
    12. //沒有資料的話就不往下執行
    13. if (dataGridView1.Rows.Count == 0)   
    14. return;   
    15. //例項化一個Excel.Application物件
    16.         Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();   
    17. //讓後臺執行設定為不可見,為true的話會看到開啟一個Excel,然後資料在往裡寫
    18.         excel.Visible = false;   
    19. //新增加一個工作簿,Workbook是直接儲存,不會彈出儲存對話方塊,加上Application會彈出儲存對話方塊,值為false會報錯
    20.     excel.Application.Workbooks.Add(true);                 
    21. //生成Excel中列頭名稱
    22. for (int i = 0; i < dataGridView1.Columns.Count; i++)   
    23.         {   
    24.             excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;   
    25.         }   
    26. //把DataGridView當前頁的資料儲存在Excel中
    27. for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)   
    28.         {   
    29. for (int j = 0; j < dataGridView1.Columns.Count; j++)   
    30.             {   
    31. if (dataGridView1[j, i].ValueType == typeof(string))   
    32.                 {   
    33.                     excel.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();   
    34.                 }   
    35. else
    36.                 {   
    37.                     excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();   
    38.                 }   
    39.             }   
    40.         }   
    41. //設定禁止彈出儲存和覆蓋的詢問提示框
    42.         excel.DisplayAlerts = false;   
    43.         excel.AlertBeforeOverwriting = false;   
    44. //儲存工作簿
    45.         excel.Application.Workbooks.Add(true).Save();   
    46. //儲存excel檔案
    47.         excel.Save("D:" + "//KKHMD.xls");   
    48. //確保Excel程序關閉
    49.         excel.Quit();   
    50.         excel = null;   
    51.     }   
    52. catch (Exception ex)   
    53.     {   
    54.         MessageBox.Show(ex.Message, "錯誤提示");   
    55.     }   
    56. }  
    57. #endregion
    C#程式碼 複製程式碼
  58. #region 匯出全部資料到Excel中,可彈出儲存對話方塊,但沒用SaveFileDialog
  59. publicvoid printAll(System.Data.DataTable dt)   
  60. {   
  61. //匯出到execl
  62. try
  63.     {   
  64. //沒有資料的話就不往下執行
  65. if (dt.Rows.Count == 0)   
  66. return;   
  67. //例項化一個Excel.Application物件
  68.         Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();   
  69. //新增加一個工作簿,Workbook是直接儲存,不會彈出儲存對話方塊,加上Application會彈出儲存對話方塊,值為false會報錯
  70.         excel.Application.Workbooks.Add(true);   
  71. //讓後臺執行設定為不可見,為true的話會看到開啟一個Excel,然後資料在往裡寫
  72.         excel.Visible = false;   
  73. //生成Excel中列頭名稱
  74. for (int i = 0; i < dt.Columns.Count; i++)   
  75.         {   
  76.             excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;//輸出DataGridView列頭名
  77.         }   
  78. //把DataGridView當前頁的資料儲存在Excel中
  79. if (dt.Rows.Count > 0)   
  80.         {   
  81. for (int i = 0; i < dt.Rows.Count; i++)//控制Excel中行,上下的距離,就是可以到Excel最下的行數,比資料長了報錯,比資料短了會顯示不完
  82.             {   
  83. for (int j = 0; j < dt.Columns.Count; j++)//控制Excel中列,左右的距離,就是可以到Excel最右的列數,比資料長了報錯,比資料短了會顯示不完
  84.                 {   
  85. string str = dt.Rows[i][j].ToString();   
  86.                     excel.Cells[i + 2, j + 1] = "'" + str;//i控制行,從Excel中第2行開始輸出第一行資料,j控制列,從Excel中第1列輸出第1列資料,"'" +是以string形式儲存,所以遇到數字不會轉成16進位制
  87.                 }   
  88.             }   
  89.         }   
  90. //設定禁止彈出儲存和覆蓋的詢問提示框
  91.         excel.DisplayAlerts = false;   
  92.         excel.AlertBeforeOverwriting = false;   
  93. //儲存工作簿,值為false會報錯
  94.         excel.Application.Workbooks.Add(true).Save();   
  95. //儲存excel檔案
  96.         excel.Save("D:" + "//KKHMD.xls");   
  97. //確保Excel程序關閉
  98.         excel.Quit();   
  99.         excel = null;   
  100.     }   
  101. catch (Exception ex)   
  102.     {   
  103.         MessageBox.Show(ex.Message, "錯誤提示");   
  104.     }   
  105. }   
  106. privatevoid button1_Click(object sender, EventArgs e)   
  107. {   
  108.     printAll(dt);   
  109. }  
  110. #endregion
  111. 這不是最好的版本,無論是功能上還是效率上,至少沒用SaveFileDialog的話,控制不到取消儲存按鈕,一旦點選了取消儲存,則軟體重起之前一直都不能再使用匯出功能,只能是手動殺掉程序中的Excel.exe,程序中的Excel.exe也是沒有在程式裡進行關閉的,所以是使用一次匯出功能,就會在程序中多生成一次Excel.exe

    黑色頭髮:http://heisetoufa.javaeye.com