c# datagridview 导入excel 函数

public  static  bool  OutToExcelFromDataGridView( string  title, DataGridView dgv,  bool  isShowExcel)
      {
          int  titleColumnSpan = 0; //标题的跨列数
          string  fileName =  "" ; //保存的excel文件名
          int  columnIndex = 1; //列索引
          if  (dgv.Rows.Count == 0)
              return  false ;
          /*保存对话框*/
          SaveFileDialog sfd =  new  SaveFileDialog();
          sfd.Filter =  "导出Excel(*.xls)|*.xlsx" ;
          sfd.FileName = title + DateTime.Now.ToString( "yyyyMMddhhmmss" );
 
          if  (sfd.ShowDialog() == DialogResult.OK)
          {
              fileName = sfd.FileName;
              /*建立Excel对象*/
              Microsoft.Office.Interop.Excel.Application excel =  new  Microsoft.Office.Interop.Excel.Application();
              if  (excel ==  null )
              {
                  MessageBox.Show( "无法创建Excel对象,可能您的计算机未安装Excel!" );
                  return  false ;
              }
              try
              {
                  excel.Application.Workbooks.Add( true );
                  excel.Visible = isShowExcel;
                  /*分析标题的跨列数*/
                  foreach  (DataGridViewColumn column  in  dgv.Columns)
                  {
 
                      if  (column.Visible ==  true )
                          titleColumnSpan++;
                  }
                  /*合并标题单元格*/
                  Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)excel.ActiveSheet;
                  //worksheet.get_Range("A1", "C10").Merge();           
                  worksheet.get_Range(worksheet.Cells[1, 1]  as  Range, worksheet.Cells[1, titleColumnSpan]  as  Range).Merge();
                  /*生成标题*/
                  excel.Cells[1, 1] = title;
                  (excel.Cells[1, 1]  as  Range).HorizontalAlignment = XlHAlign.xlHAlignCenter; //标题居中
                                                                                             //生成字段名称
                  columnIndex = 1;
                  for  ( int  i = 0; i < dgv.ColumnCount; i++)
                  {
                      if  (dgv.Columns[i].Visible ==  true  && dgv.Columns[i].HeaderText !=  "删除" )
                      {
                          excel.Cells[2, columnIndex] = dgv.Columns[i].HeaderText;
                          (excel.Cells[2, columnIndex]  as  Range).HorizontalAlignment = XlHAlign.xlHAlignCenter; //字段居中
                          columnIndex++;
                      }
                  }
                  //填充数据             
                  for  ( int  i = 0; i < dgv.RowCount; i++)
                  {
                      columnIndex = 1;
                      for  ( int  j = 0; j < dgv.ColumnCount; j++)
                      {
                          if  (dgv.Columns[j].Visible ==  true  && dgv.Columns[j].HeaderText !=  "删除" )
                          {
                              if  (dgv[j, i].ValueType ==  typeof ( string ))
                              {
                                  excel.Cells[i + 3, columnIndex] =  "'"  + dgv[j, i].Value.ToString();
                              }
                              else
                              {
                                  excel.Cells[i + 3, columnIndex] = dgv[j, i].Value.ToString();
                              }
                              (excel.Cells[i + 3, columnIndex]  as  Range).HorizontalAlignment = XlHAlign.xlHAlignLeft; //字段居中
                              columnIndex++;
                          }
                      }
                  }
                  worksheet.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
              }
              catch  { }
              finally
              {
                  excel.Quit();
                  excel =  null ;
                  GC.Collect();
              }
              KillProcess( "Excel" );
              return  true ;
          }
          else
          {
              return  false ;
          }
      }
 
      private  static  void  KillProcess( string  processName) //杀死与Excel相关的进程
      {
          System.Diagnostics.Process myproc =  new  System.Diagnostics.Process(); //得到所有打开的进程
          try
          {
              foreach  (System.Diagnostics.Process thisproc  in  System.Diagnostics.Process.GetProcessesByName(processName))
              {
                  if  (!thisproc.CloseMainWindow())
                  {
                      thisproc.Kill();
                  }
              }
          }
          catch  (Exception Exc)
          {
              throw  new  Exception( "" , Exc);
          }
      }

猜你喜欢

转载自blog.csdn.net/qq_24488333/article/details/80571028
今日推荐