excel-导入导出

本文介绍了一个使用 C# 实现的 Excel 文件导入和导出功能,包括读取文件、数据转换和 Excel 文件生成。代码示例涵盖了从文件读取数据、填充 DataGridView 控件、预关闭未退出的 Excel 进程以及将 DataGridView 数据导出到 Excel 的完整流程。
摘要由CSDN通过智能技术生成
导入excel2007
C# code
        
        
#region 导入
        
        
  /// <summary>
        
        
  /// 点击读取按钮
        
        
  /// </summary>
        
        
  /// <param name="sender"></param>
        
        
  /// <param name="e"></param>
        
        
  private void btnReadFile_Click( object sender, EventArgs e)
        
        
 {
        
        
  // 打开一个文件选择框
        
        
  OpenFileDialog ofd = new OpenFileDialog();
        
        
 ofd.Title = " Excel文件 " ;
        
        
 ofd.FileName = "" ; // 为了获取特定的系统文件夹, // 可以使用System.Environment类的静态方法GetFolderPath()。该方法接受一个Environment.SpecialFolder枚举,其中可以定义要返回路径的哪个系统目录 ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        
        
 ofd.Filter = " Excel文件(*.xlsx)|*xlsx " ;
        
        
 ofd.ValidateNames = true ; // 文件有效性验证ValidateNames,验证用户输入是否是一个有效的windows文件名
        
        
  ofd.CheckFileExists = true ; // 验证路径有效性
        
        
  ofd.CheckPathExists = true ; // 验证文件有效性
        
        
  string strName = this .txtPutInFile.Text;
        
        
  if (strName == "" )
        
        
 {
        
        
 MessageBox.Show( " 没有选择excel文件!!无法导入--!! " );
        
        
  return ;
        
        
 } PreExitExcel();
        
        
 EcxelToDataGridView(strName, this .dgvEmail);
        
        
  // MessageBox.Show("导入成功!!!");
        
        
  }
        
        
  /// <summary>
        
        
  /// excel数据导入方法
        
        
  /// </summary>
        
        
  /// <param name="filePath"></param>
        
        
  /// <param name="dgv"></param>
        
        
  public void EcxelToDataGridView( string filePath, DataGridView dgv)
        
        
 {
        
        
  // 根据路径打开一个excel文件并将数据填充到dataset中
        
        
  string strConn = @" Provider = Microsoft.Ace.OLEDB.12.0; Data Source = " + filePath + " ; Extended Properties = 'Excel 12.0;HDR = NO; IMEX=1' " ;
        
        
 OleDbConnection conn = new OleDbConnection(strConn);
        
        
 conn.Open();
        
        
  string strExcel = "" ;
        
        
 strExcel = " select * from [sheet1$] " ;
        
        
 DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null );
        
        
  string tableName = schemaTable.Rows[ 0 ][ 2 ].ToString().Trim();
        
        
 OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
        
        
 DataSet ds = new DataSet();
        
        
 myCommand.Fill(ds, " table1 " );
        
        
  // 根据DataGridView的列构造一个DataTable
        
        
  DataTable td = ds.Tables[ 0 ];
        
        
  try
        
        
 {
        
        
  // MessageBox.Show(td.ToString());
        
        
  foreach (DataGridViewColumn dgvc in dgv.Columns)
        
        
 {
        
        
  if (dgvc.Visible && dgvc.CellType != typeof (DataGridViewCheckBoxCell))
        
        
 {
        
        
 DataColumn dc = new DataColumn();
        
        
 dc.ColumnName = dgvc.DataPropertyName;
        
        
 dc.DataType = dgvc.ValueType;
        
        
  // MessageBox.Show(dc.ToString());
        
        
  td.Columns.Add(dc);
        
        
 }
        
        
 }
        
        
  // 根据excel的行逐一对上面的构造的datatable的列进行赋值
        
        
  for ( int i = 0 ; i < ds.Tables[ 0 ].Rows.Count - 1 ; i ++ )
        
        
 {
        
        
  // int j = 0;
        
        
  DataRow dr = td.NewRow();
        
        
 DataRow excelRow = ds.Tables[ 0 ].Rows[i];
        
        
  foreach (DataColumn dc in td.Columns)
        
        
 {
        
        
 dr[dc] = excelRow[i];
        
        
  // MessageBox.Show(dr[dc].ToString());
        
        
  i ++ ;
        
        
 }
        
        
 td.Rows.Add(dr);
        
        
 }
        
        
  // 在datagridview中显示导入的数据
        
        
  dgv.DataSource = td;
        
        
 }
        
        
  catch (Exception)
        
        
 {
        
        
 MessageBox.Show( " 该表已存在你即将导入的excel文件...,请点击清空按钮重新导入... " );
        
        
  return ;
        
        
 }
        
        
  finally
        
        
 {
        
        
 conn.Close();
        
        
 }
        
        
 }
        
        
  /// <summary>
        
        
  /// 预关闭未退出的Excel进程方法
        
        
  /// </summary>
        
        
  public void PreExitExcel()
        
        
 {
        
        
 System.Diagnostics.Process[] allProcess = System.Diagnostics.Process.GetProcesses();
        
        
  foreach (System.Diagnostics.Process thisprocess in allProcess)
        
        
 {
        
        
  string processName = thisprocess.ProcessName;
        
        
  if (processName.ToLower() == " excel " )
        
        
 {
        
        
  try
        
        
 {
        
        
 thisprocess.Kill();
        
        
 }
        
        
  catch (Exception e)
        
        
 {
        
        
 MessageBox.Show(e.Message);
        
        
  return ;
        
        
 }
        
        
 }
        
        
 }
        
        
 }
        
        
  #endregion
        
        
 
 

导出excel2007
C# code
         
         
/// <summary>
         
         
  /// 需要添加引用com中的"microsoft excel 11.0 object library"
         
         
  /// </summary>
         
         
  ///
         
         
  /// <param name="mydgv"></param>
         
         
  public void ExportdatagridviewToexcel(DataGridView mydgv)
         
         
 {
         
         
  if (mydgv.Rows.Count == 0 )
         
         
 {
         
         
 MessageBox.Show( " 没有数据可供导出! " , " 提示信息 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
         
         
  return ;
         
         
 }
         
         
  else
         
         
 {
         
         
 SaveFileDialog savedialog = new SaveFileDialog();
         
         
 savedialog.DefaultExt = " xlsx " ;
         
         
 savedialog.Filter = " microsoft office execl files (*.xlsx)|*.xlsx " ;
         
         
 savedialog.FilterIndex = 0 ;
         
         
 savedialog.RestoreDirectory = true ;
         
         
 savedialog.Title = " 导出数据到excel表格 " ;
         
         
 savedialog.ShowDialog();
         
         
  if (savedialog.FileName.IndexOf( " : " ) < 0 ) return ; // 被点了取消
         
         
  // Microsoft.office.interop.excel.application xlapp = new microsoft.office.interop.excel.application();
         
         
  Microsoft.Office.Interop.Excel.Application xlapp = new Microsoft.Office.Interop.Excel.Application();
         
         
  if (xlapp == null )
         
         
 {
         
         
 MessageBox.Show( " 可能您的机子未安装excel,无法创建excel对象! " , " 系统提示 " , MessageBoxButtons.OK, MessageBoxIcon.Error);
         
         
  return ;
         
         
 }
         
         
 Microsoft.Office.Interop.Excel.Workbooks workbooks = xlapp.Workbooks;
         
         
 Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
         
         
 Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[ 1 ]; // 取得sheet1
         
         
  // 定义表格内数据的行数和列数 
         
         
  int rowscount = mydgv.Rows.Count;
         
         
  int colscount = mydgv.Columns.Count;
         
         
  // 行数不可以大于65536 
         
         
  if (rowscount > 65536 )
         
         
 {
         
         
 MessageBox.Show( " 数据行记录超过65536行,不能保存! " , " 系统提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
         
         
  return ;
         
         
 }
         
         
  // 列数不可以大于255 
         
         
  if (colscount > 256 )
         
         
 {
         
         
 MessageBox.Show( " 数据列记录超过256列,不能保存! " , " 系统提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
         
         
  return ;
         
         
 }
         
         
  // 写入标题
         
         
  for ( int i = 0 ; i < mydgv.ColumnCount; i ++ )
         
         
 {
         
         
 worksheet.Cells[ 1 , i + 1 ] = mydgv.Columns[i].HeaderText;
         
         
 }
         
         
  // 写入数值
         
         
  for ( int r = 0 ; r < mydgv.Rows.Count; r ++ )
         
         
 {
         
         
  for ( int i = 0 ; i < mydgv.ColumnCount; i ++ )
         
         
 {
         
         
  if (mydgv[i, r].ValueType == typeof ( string ))
         
         
 {
         
         
 worksheet.Cells[r + 2 , i + 1 ] = "" + mydgv.Rows[r].Cells[i].Value; // 将长数值转换成文本
         
         
  }
         
         
  else
         
         
 {
         
         
 worksheet.Cells[r + 2 , i + 1 ] = mydgv.Rows[r].Cells[i].Value;
         
         
 }
         
         
 }
         
         
 System.Windows.Forms.Application.DoEvents();
         
         
 }
         
         
 worksheet.Columns.EntireColumn.AutoFit(); // 列宽自适应
         
         
  if (savedialog.FileName != "" )
         
         
 {
         
         
  try
         
         
 {
         
         
 workbook.Saved = true ;
         
         
 workbook.SaveCopyAs(savedialog.FileName);
         
         
 }
         
         
  catch (Exception ex)
         
         
 {
         
         
 MessageBox.Show( " 导出文件时出错,文件可能正被打开!... " + ex.Message, " 系统提示 " , MessageBoxButtons.OK, MessageBoxIcon.Error);
         
         
 }
         
         
 }
         
         
  // GC.Collect(); // 强行销毁 
         
         
  MessageBox.Show( " 数据导出成功! " , " 提示信息 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
         
         
  // 关闭excel进程
         
         
  if (xlapp != null )
         
         
 {
         
         
 xlapp.Quit();
         
         
 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlapp);
         
         
  foreach (System.Diagnostics.Process theProc in System.Diagnostics.Process.GetProcessesByName( " EXCEL " ))
         
         
 {
         
         
  // 先关闭图形窗口。如果关闭失败...有的时候在状态里看不到图形窗口的excel了,
         
         
  // 但是在进程里仍然有EXCEL.EXE的进程存在,那么就需要杀掉它:p 
         
         
  if (theProc.CloseMainWindow() == false )
         
         
 {
         
         
 theProc.Kill();
         
         
 }
         
         
 }
         
         
 xlapp = null ;
         
         
 }
         
         
 }
         
         
 }
         
         
 
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值