DataGridView导出EXCEL

发布时间 2023-10-18 15:06:31作者: 美在天下
public class execl
    {
        /// <summary>
        /// 导出EXECLDataGridViewX
        /// </summary>
        /// <param name="dataGridView">DataGridViewX</param>
        /// <param name="IsVisible">是否导出隐藏列</param>
        public static void exp(DataGridView dataGridView,bool IsVisible=false)
        {
            try
            {
                if (dataGridView.RowCount<=0)
                {
                    throw new Exception("未有导出数据!!!");
                }
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = "2007电子表格|*.xlsx";

                if (saveFileDialog.ShowDialog()== DialogResult.Cancel)
                {
                    return;
                }

                string file = saveFileDialog.FileName;

                XSSFWorkbook workbook2007 = new XSSFWorkbook();  //新建xlsx工作簿  
                workbook2007.CreateSheet("Sheet1");

                XSSFSheet SheetOne = (XSSFSheet)workbook2007.GetSheet("Sheet1");

                //首行标题
                // SheetOne.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 18));





                #region 样式1
                ///样试
                ICellStyle style = workbook2007.CreateCellStyle();
                //设置单元格的样式:水平对齐居中
                style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                //设置垂直剧中
                style.VerticalAlignment = VerticalAlignment.Center;
                //边框颜色
                style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                //style.FillPattern = FillPattern.SolidForeground;
                //自动换行
               // style.WrapText = true;
            
                #endregion
                #region 样式2
                ///样试
                ICellStyle style2 = workbook2007.CreateCellStyle();
                //设置单元格的样式:水平对齐居中
                style2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                //设置垂直剧中
                style2.VerticalAlignment = VerticalAlignment.Center;
                //边框颜色
                style2.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                style2.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                style2.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                style2.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                //style.FillPattern = FillPattern.SolidForeground;
                //自动换行
                //style2.WrapText = true;
                style2.FillForegroundColor = HSSFColor.Red.Index;
                style2.FillPattern = FillPattern.SolidForeground;
                #endregion
                int i = 0; //行号
                XSSFRow row = (XSSFRow)SheetOne.CreateRow(i);
             
                int c = 0; //列号
                ICell cell;
                //写入列
                foreach (DataGridViewColumn eo in dataGridView.Columns)
                {
                    if (IsVisible)
                    {
                        if (!eo.Visible)
                        {
                            continue;
                        }
                    }
                    cell = row.CreateCell(c);
                    cell.SetCellValue(eo.HeaderText);
                    cell.CellStyle = style;
                    c++;

                }
                i++;
                foreach (DataGridViewRow ei in dataGridView.Rows)
                {
                    row= (XSSFRow)SheetOne.CreateRow(i);
                  
                    
                    c = 0;
                    foreach (DataGridViewColumn eo in dataGridView.Columns)
                    {
                        if (IsVisible)
                        {
                            if (!eo.Visible)
                            {
                                continue;
                            }
                        }
                        cell = row.CreateCell(c);
                        cell.SetCellValue(ei.Cells[eo.Name].Value.ToString());

                        if (ei.DefaultCellStyle.BackColor.Name == "Red")
                        {
                            cell.CellStyle = style2;
                        }
                        else
                        {
                            cell.CellStyle = style;
                        }

                       
                
                        c++;

                    }
                    i++;
                }
                FileStream file2007 = new FileStream(file, FileMode.Create);
                workbook2007.Write(file2007);
                file2007.Close();
                workbook2007.Close();
                 MessageBox.Show  ("导出成功");



            }
            catch (Exception ex )
            {

                throw ex ;
            }

        }
    }
}