將DataGirdView數據,導出EXCEL文件

/// <summary>
       
/// 將DataGirdView數據,導出EXCEL文件.
       
/// </summary>
       
/// <param name="dgv">DataGridView控件名稱</param>
       
/// <param name="name">導出excel文件名稱</param>
        public static void ToExcel(DataGridView dgv, string name)
        {
           
try
            {
               
//總可見列數,總可見行數
                int colCount = dgv.Columns.GetColumnCount(DataGridViewElementStates.Visible);
               
int rowCount = dgv.Rows.GetRowCount(DataGridViewElementStates.Visible);

               
//dataGridView 沒有數據提示
                if (dgv.Rows.Count == 0 || rowCount == 0)
                {
                    MessageBox.Show(
"列表中沒有數據無法導出!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                   
return;
                }
                SaveFileDialog save
= new SaveFileDialog();
                save.Filter
= "excel files(*.xls)|*.xls";
                save.Title
= "請選擇要導出數據的位置";
                save.FileName
= name + DateTime.Now.ToLongDateString();
                save.InitialDirectory
= System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);
               
if (save.ShowDialog() == DialogResult.OK)
                {
                    XlsDocument xls
= new XlsDocument();//創建空xls文檔

                    xls.FileName
= save.FileName;//保存路徑,如果直接發送到客戶端的話只需要名稱 生成名稱

                    Worksheet sheet
= xls.Workbook.Worksheets.Add(name); //創建一個工作頁爲Dome   
                  

                   
//設置文檔列屬性
                    ColumnInfo cinfo = new ColumnInfo(xls, sheet);//設置xls文檔的指定工作頁的列屬性
                    cinfo.Collapsed = true;
                   
//設置列的範圍 如 0列-10列
                    cinfo.ColumnIndexStart = 0;//列開始
                    cinfo.ColumnIndexEnd = 10;//列結束
                    cinfo.Collapsed = true;
                    cinfo.Width
= 90 * 60;//列寬度
                    sheet.AddColumnInfo(cinfo);
                   
//設置文檔列屬性結束

                   
//設置指定工作頁跨行跨列
                    MergeArea ma = new MergeArea(1, 1, 1, dgv.ColumnCount);//從第1行跨到第二行,從第一列跨到第5列
                    sheet.AddMergeArea(ma);
                   
//設置指定工作頁跨行跨列結束

                   
//創建列樣式創建列時引用
                    XF cellXF = xls.NewXF();
                    cellXF.VerticalAlignment
= VerticalAlignments.Centered;
                    cellXF.HorizontalAlignment
= HorizontalAlignments.Centered;
                    cellXF.Font.Height
= 24 * 12;
                    cellXF.Font.Bold
= true;
                    cellXF.Pattern
= 0;//設定單元格填充風格。如果設定爲0,則是純色填充
                    cellXF.PatternBackgroundColor = Colors.Black;//填充的背景底色
                    cellXF.PatternColor = Colors.Black;//設定填充線條的顏色
                   
//創建列樣式結束

                   
//創建列
                    Cells cells = sheet.Cells; //獲得指定工作頁列集合
                   
//列操作基本
                    Cell cell = cells.Add(1, 1, name, cellXF);//添加標題列返回一個列  參數:行 列 名稱 樣式對象
                   
//設置XY居中
                    cell.HorizontalAlignment = HorizontalAlignments.Centered;
                    cell.VerticalAlignment
= VerticalAlignments.Centered;
                   
//設置字體
                    cell.Font.Bold = true;//設置粗體
                    cell.Font.ColorIndex = 0;//設置顏色碼          
                    cell.Font.FontFamily = FontFamilies.Roman;//設置字體 默認爲宋體              
                   
//創建列結束 

                   
//生成字段名稱
                    int k = 0;
                   
for (int i = 0; i < dgv.ColumnCount; i++)
                    {
                       
if (dgv.Columns[i].Visible)  //不導出隱藏的列
                        {
                            Cell title
= cells.Add(2, k + 1, dgv.Columns[i].HeaderText);
                            title.HorizontalAlignment
= HorizontalAlignments.Centered;
                            title.VerticalAlignment
= VerticalAlignments.Centered;
                            k
++;
                        }
                    }
                   
//填充數據
                    for (int i = 0; i < dgv.RowCount; i++)
                    {
                        k
= 1;
                       
for (int j = 0; j < dgv.ColumnCount; j++)
                        {
                           
if (dgv.Columns[j].Visible)  //不導出隱藏的列
                            {
                               
if (dgv[j, i].ValueType == typeof(string))
                                {
                                    cells.Add(i
+ 3, k, "" + dgv[j, i].Value.ToString());
                                   

                                }
                               
else
                                {
                                   
string str = dgv[j, i].Value.ToString();
                                   
if (str == "True")
                                    {
                                        str
= "";
                                    }
                                   
else if(str =="False")
                                    {
                                        str
= "";
                                    }
                                    cells.Add(i
+ 3, k, str);
                                }
                            }
                            k
++;
                        }
                    }

                    xls.Save(
true);//保存
                    MessageBox.Show("Excel文件導出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
           
catch (Exception ce)
            {
                MessageBox.Show(ce.Message,
"提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

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