方法一:;微软自带excel 操作类
项目运行:设置 Any CPU
引用:System.Data.OleDb
点击事件导入按钮:

private void buttonX25_Click(object sender, EventArgs e){//打开一个文件选择框OpenFileDialog ofd = new OpenFileDialog();ofd.Title = "Excel文件";ofd.FileName = "";ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);//为了获取特定的系统文件夹,可以使用System.Environment类的静态方法GetFolderPath()。该方法接受一个Environment.SpecialFolder枚举,其中可以定义要返回路径的哪个系统目录ofd.Filter = "Excel文件| *.xlsx;*.xls";ofd.ValidateNames = true;     //文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名ofd.CheckFileExists = true;  //验证路径有效性ofd.CheckPathExists = true; //验证文件有效性string strName = string.Empty;if (ofd.ShowDialog() == DialogResult.OK){strName = ofd.FileName;}if (strName == ""){MessageBox.Show("没有选择Excel文件!无法进行数据导入");return;}EXCLChannel hh = new EXCLChannel();//调用导入数据方法EcxelToDataGridView(strName, hh.dataGridViewX20);}

调用方法:绑定DataGridView进行预览

     public void EcxelToDataGridView(string filePath, DataGridViewX dgv){string strConn = "";if (filePath.EndsWith(".xls")){strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data  Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", filePath);}else if (filePath.EndsWith(".xlsx")){strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data  Source={0};Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'", filePath);}//根据路径打开一个Excel文件并将数据填充到DataSet中//导入时包含Excel中的第一行数据,并且将数字和字符混合的单元格视为文本进行导入System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(strConn);conn.Open();string strExcel = "";System.Data.OleDb.OleDbDataAdapter myCommand = null;DataSet dd = null;strExcel = "select * from [sheet1$]";myCommand = new System.Data.OleDb.OleDbDataAdapter(strExcel, strConn);dd = new DataSet();myCommand.Fill(dd, "table1");//根据DataGridView的列构造一个新的DataTableDataTable tb = new DataTable();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;//若需要限制导入时的数据类型则取消注释,前提是DataGridView必须先绑定一个数据源那怕是空的DataTabletb.Columns.Add(dc);}}//根据Excel的行逐一对上面构造的DataTable的列进行赋值foreach (DataRow excelRow in dd.Tables[0].Rows){int i = 0;DataRow dr = tb.NewRow();foreach (DataColumn dc in tb.Columns){dr[dc] = excelRow[i];i++;}tb.Rows.Add(dr);}//在DataGridView中显示导入的数据dgv.DataSource = tb;EXCLChannel fg = new EXCLChannel(tb);fg.ShowDialog();}//另一个窗体  EXCLChannel 实现预览public EXCLChannel(DataTable td){InitializeComponent();this.dataGridViewX20.DataSource = td;          }

方法二:NPOI导入
引用:NPOI
添加类:ExcelRender 下载
链接:https://pan.baidu.com/s/1objybCCUKWw6ogXxkjThqg
提取码:lw0s

  public void EcxelToDataGridView(string filePath, DataGridViewX dgv){FileStream fs = null;try{//String 文件路径,FileMode 文件打开模式,FileAccess 文件访问方式fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);//byte[] fileBytes = new byte[fs.Length];//从流中读取数据,返回字节数组fs.Read(fileBytes, 0, Convert.ToInt32(fs.Length));//实例化DataTable dtexcel = new DataTable();if (filePath.EndsWith(".xls")){dtexcel = ExcelRender.RenderFromExcel(new MemoryStream(fileBytes), 0);}else{dtexcel = ExcelRender.RenderFromExcelxlsx(new MemoryStream(fileBytes), 0);}if (dtexcel.Rows.Count > 0){EXCLChannel fg = new EXCLChannel(dtexcel);fg.ShowDialog();}else{MessageBox.Show("请检查EXCL表格数据和表头是否正确");}if (dtexcel.Rows.Count > 0){fileBytes = null;}}catch (Exception){}finally{if (fs != null){fs.Close();}}}//另一个窗体  EXCLChannelpublic EXCLChannel(DataTable td){InitializeComponent();this.dataGridViewX20.DataSource = td;          }

//保存数据库
页面点击保存按钮:

  private void buttonX25_Click(object sender, EventArgs e){if (dataGridViewX20.Rows.Count > 0){int num = 0;Dictionary<int, string>[] dis = new Dictionary<int, string>[dataGridViewX20.Rows.Count];try{foreach (DataGridViewRow DVG in dataGridViewX20.Rows){Dictionary<int, string> di = new Dictionary<int, string>();di.Add(1, DVG.Cells["Fixed_Assets_Code"].Value.ToString());di.Add(2, DVG.Cells["Capital_assets_Code"].Value.ToString());di.Add(3, DVG.Cells["Class_Code"].Value.ToString());di.Add(4, DVG.Cells["Place_Code"].Value.ToString());di.Add(5, DVG.Cells["Department_Code"].Value.ToString());di.Add(6, DVG.Cells["Procurement_Date"].Value.ToString());di.Add(7, DVG.Cells["Manufacture"].Value.ToString());dis[num] = di;num++;}int iss = ibll.InsertEREXCL(dis);               MessageBox.Show("导入成功:" + iss + "条数据!!");}catch (Exception){MessageBox.Show("导入失败,文件内容不符合导入条件");}}else{MessageBox.Show("没有保存的数据");}}

BLL代码:

  public int InsertEREXCL5(Dictionary<int, string>[]  bys){int numb = 0;foreach ( Dictionary<int, string> item in bys){//时间转换DateTime dt = Convert.ToDateTime("1777-1-1");try{dt = Convert.ToDateTime(item[6]);}catch (Exception){dt = Convert.ToDateTime("1777-1-1");}if (IIn.InsertEREXCL1(item[1],item[2], item[3], item[4], item[5], dt, item[7]) >0){numb++;}}return numb;}
//item[1],item[2], item[3], item[4], item[5], dt, item[7] 对应参数public  int InsertEREXCL1(string Fixed_Assets_Code, string Capital_assets_Code, string Class_Code, string Place_Code, string Department_Code, DateTime Procurement_Date, string Manufacture){lock (obinsertDao){SqlParameter[] sqlPams = {new SqlParameter("@type",SqlDbType.NChar),new SqlParameter("@Fixed_Assets_Code",SqlDbType.NChar),..............省略..........};//声明SQL参数数组并实例化相关参数sqlPams[0].Value = "InsertEREXCL";//对参数赋值sqlPams[1].Value = Fixed_Assets_Code;//对参数赋值    ....................省略.....................//myDAL.DAL_SelectDB_Par("存储过程的名字",SQL参数数组);return dt;}}

C# winform Excel导入保存数据两种方法相关推荐

  1. python 创建excel 并保存(两种方法)

    1. 概要 python中的包xlwt和xlsxwriter都是比较方便创建excel文件并写入数据的. 2. xlwt 创建excel并保存 xlwt中: 通过xlwt.Workbook()来新建工 ...

  2. 将Excel表格导入mysql数据表_如何把Excel导入mysql数据表的方法详解

    把Excel导入mysql数据表其实是一件非常的简单的事情了,我们可以通过多种方法来实现了,下面我们来看一些关于小编整理的把Excel导入mysql数据表的方法了. 方法一 把Excel导入mysql ...

  3. SketchUp 2019 文件导入AI的两种方法(附插件)

    作者:TutorialsUp 今天与大家分享TutorialsUp教程 将SketchUp文件导入AI的两种方法 作者通过两种方式,完美地将SU文件导入AI进行编辑. 第一种方法是SketchUp原生 ...

  4. 取消Excel打开密码的两种方法

    Excel设置了打开密码,想要取消打开密码是由两种方法的,今天分享这两种方法给大家. 方法一: 是大家常见的取消方法,打开excel文件之后,然后点击文件 – 保护工作簿,点击[用密码进行加密] 删除 ...

  5. 设置和取消Excel限制保护的两种方法

    Excel是我们工作中经常用到的办公软件,重要的文件往往还需要设置保护限制.设置和去除的方法有两种,下面就来说说看. 方法一: 1.打开Excel表格,点击上方工具栏的[审阅],再选择[保护工作表]或 ...

  6. 如何批量在excel中将中文转换为汉语拼音(Excel文字转拼音两种方法)

    今天工作遇到一个需求,其中有一列的需求是将姓名转变为拼音全称 这个需求有两种解决办法(目前) 直接进入正题: 1.第一种方法,利用自定义函数 要将以上的名字汉语拼音写出来,(举个例子,实际数据比这要多 ...

  7. 获取excel文件路径的两种方法

    excel文件路径获取方法一:       对Excel感兴趣的朋友可加Excel学习交流群:284029260 2010版查看当前工作薄的excel教程文件路径地址的方法是: 单击文件--信息,在右 ...

  8. [转]C# winForm 自定义鼠标样式的两种方法

    本文转自:http://www.cnblogs.com/hzbzxm/archive/2008/09/15/1291104.html 以前试过在WinForm中自定义鼠标样式,结果显示出来的鼠标变成单 ...

  9. 前端从后端导出excel表格文件的两种方法

    大部分前端开发人员在做项目的过程中应该都遇到过这个问题: 在前端点击一个导出或者下载的按钮,从后端导出包含列表中的数据的excel文件. 那么如何实现呢? 方法一: 如果项目中没有涉及要要权限验证的问 ...

最新文章

  1. tronado restful
  2. boost::typeindex::runtime_cast相关的测试程序
  3. C#中HttpClient使用注意:预热与长连接
  4. sap实施和开发哪个前景_2021年了!还不知道 SAP顾问的职业前景?
  5. c++中的new_handler
  6. android动画放大后缩小,Android 补间动画 scale(缩放)
  7. java获取cpu使用率_2019年阿里P8架构师的解析:最新Java性能测试、调优策略
  8. Kaggle新赛:自动检测赛场上的头盔撞击事件
  9. SQLLoader1(简单测试,以控制文件方式导入数据)
  10. 网宿科技:向云服务商转型
  11. js datagrid 移动去重
  12. python初体验(2)——面向对象篇
  13. ouravr某PCB高手发言总结
  14. OpenNESS Release 21.03
  15. MTK6577+Android4.0之增加重启功能
  16. thinkphp集成系列之阿里云oss
  17. UE4C++开发学习笔记(01)——创建一个能操控的Character
  18. oracle18c默认sid,Oracle 18c-可伸缩序列(Scalable Sequence)
  19. 【华人学者风采】倪冰冰 上海交通大学
  20. 搜狗如何打特殊符号 - 搜狗特殊符号的打法!!

热门文章

  1. 计算机主板 也叫系统板或母版,什么是主板
  2. Win10截屏快捷键
  3. redis底层数据结构之跳跃表
  4. Xilinx FPGA嵌入式开发(一) - EDK及SDK部分术语
  5. 【UEFI实战】EDK的编译流程说明
  6. 抗渗等级p6是什么意思_抗渗等级P6什么意思?
  7. error:Fatal error: Uncaught -- Smarty Compiler: Syntax error in template D:\sms\xampp\htdocs\lanyu
  8. wx.getLocation接口申请原因怎么填?
  9. 【转载】古龙·断章·小札[十二]:《多情剑客无情剑》
  10. 邓俊辉算法训练营第三期(带完整课件)