用户经常会有这种需求,可以将excel中的数据自动导入到数据库,而不用费时费力地手动添加,或者将某些数据导出存放到excel表格中。

一、excel导入

实现思路:先将excel文件上传到服务器(文件上传请移步前一篇文章插件webuploader实现文件上传),然后读取表格中的内容,将内容添加到相应数据表中,最后再将上传的excel文件删除。

前台代码:

<div class="div-content"><div class="list"><dl><dt>Excel文件:</dt><dd><asp:TextBox ID="txtImgUrl" runat="server" CssClass="input normal upload-path" /><div class="upload-box upload-img"></div></dd></dl></div><div class="toolbar"><asp:Button ID="btnOK" Style="margin-left: 20px" runat="server" Text="导入" class="btn" OnClick="btnOK_Click" /></div>
</div>

后台代码如下:

//导入事件
protected void btnOK_Click(object sender, EventArgs e)
{DataTable dt = null;if (this.txtImgUrl.Text.Trim() != ""){string filePath = MapPath(this.txtImgUrl.Text.Trim());//获取虚拟路径FileStream file = File.OpenRead(filePath);//读取文件dt = DotNet.FrameWork.Common.Office.NPOIExcelReader.RenderFromExcel(file);if (dt.Rows.Count > 0){if (dt.Rows.Count > 200){JscriptMsg("导入记录数超过最大限制200条!请分批导入!", string.Empty);return;}HR_Employee mdEmployee = new HR_Employee();HR_UserProfile mdUserProfile;HR_EmployeeManager bllEmployee = new HR_EmployeeManager();departmentManager bllDept = new departmentManager();HR_PostManager bllPost = new HR_PostManager();HR_DutyManager bllDuty = new HR_DutyManager();HR_UserProfileManager bllUserProfile = new HR_UserProfileManager();HR_EnterpriseManager bllEnterprise = new HR_EnterpriseManager();int sucCount = 0, errorCount = 0;try{foreach (DataRow dr in dt.Rows){mdUserProfile = new HR_UserProfile();if (dr["身份证号"].ToString() == "" || bllEmployee.Exists(dr["身份证号"].ToString())){errorCount++;continue;}mdEmployee = new HR_Employee();mdEmployee.UId = bllUserProfile.GetUIdByUPshenfenID(dr["身份证号"].ToString());mdEmployee.dept_id = dr["部门"].ToString() == "" ? 0 : bllDept.GetDeptIdByDeptName(dr["部门"].ToString());mdEmployee.PID = dr["岗位"].ToString() == "" ? 0 : bllPost.GetPIdByPostName(dr["岗位"].ToString());mdEmployee.E_Id = dr["保险所在公司"].ToString() == "" ? 0 : bllEnterprise.EidByEname(dr["保险所在公司"].ToString());mdEmployee.duty = dr["职位"].ToString() == "" ? 0 : bllDuty.GetIdByDutyName(dr["职位"].ToString());mdEmployee.emp_name = dr["姓名"].ToString();mdEmployee.emp_sex = dr["性别"].ToString();mdEmployee.emp_CardId = dr["身份证号"].ToString();mdEmployee.culture_degree = dr["文化程度"].ToString();mdEmployee.political_status = dr["政治面貌"].ToString();mdEmployee.emp_mobile = dr["联系方式"].ToString();mdEmployee.related_man = dr["紧急人"].ToString();mdEmployee.urgent_telephone = dr["紧急联系方式"].ToString();mdEmployee.contract_beg_date = DataTimeOperate(dr["合同起始日期"].ToString()); //dr["合同起始日期"].ToString() == "" ? Convert.ToDateTime("1900-1-1") : Convert.ToDateTime(dr["合同起始日期"].ToString().Replace("/", "-"));mdEmployee.contract_end_date = DataTimeOperate(dr["合同终止日期"].ToString()); //dr["合同终止日期"].ToString() == "" ? Convert.ToDateTime("1900-1-1") : Convert.ToDateTime(dr["合同终止日期"].ToString().Replace("/", "-"));mdEmployee.contract_count = dr["合同期限"].ToString() == "" ? 0 : Convert.ToInt32(dr["合同期限"]);mdEmployee.contract_period = dr["合同续订次数"].ToString() == "" ? 0 : Convert.ToInt32(dr["合同续订次数"]);mdEmployee.note_info = dr["备注"].ToString();mdEmployee.Earea = "";mdEmployee.emp_email = "";mdEmployee.emp_qq = "";mdEmployee.emp_weixin = "";mdEmployee.technical = "";mdEmployee.emp_state = int.Parse(this.rblState.SelectedValue);mdEmployee.myorder = 999;int emp_id = bllEmployee.Add(mdEmployee);//添加到职工表if (emp_id > 0){sucCount++;}else{errorCount++;}}}catch (Exception ex){errorCount++;}Response.Write("<script>top.dialog.get(window).close();</script>");JscriptMsg("导入成功" + sucCount + "条,失败" + errorCount + "条", "EmployeeList.aspx");}else{JscriptMsg("请确保文档中有数据记录行!", string.Empty);}File.Delete(filePath);}else{JscriptMsg("请先选择要导入的Excel文档!", string.Empty);}
}
//日期格式处理
protected DateTime DataTimeOperate(string str_date)
{if (str_date != ""){int index = str_date.LastIndexOf("/");string newdate = str_date.Substring(index + 1) + "/" + str_date.Substring(0, index);return Convert.ToDateTime(newdate);}else{return Convert.ToDateTime("1900-1-1");}
}

二、excel导出

用户自定义选择要导出的字段。
实现代码(前台使用CheckBoxList动态绑定所有字段)

<div class="div-content"><div class="list"><asp:CheckBoxList ID="cblist" runat="server" RepeatColumns="7" RepeatDirection="Horizontal"></asp:CheckBoxList></div><div class="toolbar"><asp:Button ID="btnOK" Style="margin-left: 20px" runat="server" Text="导出" class="btn" OnClick="btnOK_Click" /></div>
</div>

后台代码:

protected void Page_Load(object sender, EventArgs e)
{if (!IsPostBack){BindField();}
}
//绑定字段
protected void BindField()
{this.cblist.Items.Clear();this.cblist.Items.Add(new ListItem("部门", "b.dep_name as 部门"));this.cblist.Items.Add(new ListItem("岗位", "c.PostName as 岗位"));this.cblist.Items.Add(new ListItem("姓名", "a.emp_name as 姓名"));this.cblist.Items.Add(new ListItem("出生日期", "convert(varchar(50),d.UPBirthday,23) as 出生日期"));this.cblist.Items.Add(new ListItem("年龄", "datediff(year,d.UPBirthday,getdate()) as 年龄"));this.cblist.Items.Add(new ListItem("性别", "a.emp_sex as 性别"));this.cblist.Items.Add(new ListItem("身份证号", "a.emp_CardId as 身份证号"));this.cblist.Items.Add(new ListItem("婚姻状况", "(case UPMarriage when 1 then '已婚' when 0 then '未婚' else null end)as 婚姻状况"));this.cblist.Items.Add(new ListItem("入职时间", "convert(varchar(50),d.UPEntry,23) as 入职时间"));this.cblist.Items.Add(new ListItem("转正时间", "convert(varchar(50),d.UPZhuanzhengDate,23) as 转正时间"));this.cblist.Items.Add(new ListItem("工龄(月)", "datediff(month,d.UPEntry,getdate()) as '工龄(月)'"));this.cblist.Items.Add(new ListItem("薪资", "d.USalary as 薪资"));this.cblist.Items.Add(new ListItem("合同起始日期", "convert(varchar(50),a.contract_beg_date,23) as 合同起始日期"));this.cblist.Items.Add(new ListItem("合同终止日期", "convert(varchar(50),a.contract_end_date,23) as 合同终止日期"));this.cblist.Items.Add(new ListItem("工作经历", ""));for (int i = 0; i < this.cblist.Items.Count; i++){//if (i < 12)cblist.Items[i].Selected = true;}
}
//获取表格
protected DataTable BindTable(string chkSelect)
{return bllEmplyee.GetListByMultiCond(chkSelect);
}
//开始导出
protected void btnOK_Click(object sender, EventArgs e)
{try{string chkSelect = "";for (int i = 0; i < cblist.Items.Count; i++){if (cblist.Items[i].Selected){chkSelect += cblist.Items[i].Value + ",";}}if (chkSelect != ""){chkSelect = chkSelect.Substring(0, chkSelect.Length - 1);}DataTable dt = new DataTable();if (this.cblist.Items[34].Selected && this.cblist.Items[34].Text == "工作经历"){dt = BindTable(chkSelect.Substring(0, chkSelect.Length - 1));dt.Columns.Add("工作起止日期1", typeof(System.String));dt.Columns.Add("工作情况1", typeof(System.String));dt.Columns.Add("离职原因1", typeof(System.String));dt.Columns.Add("工作起止日期2", typeof(System.String));dt.Columns.Add("工作情况2", typeof(System.String));dt.Columns.Add("离职原因2", typeof(System.String));DataTable dtwork;HR_UserWorkResumeManager bllUserWork = new HR_UserWorkResumeManager();foreach (DataRow dr in dt.Rows){dtwork = null;dtwork = bllUserWork.GetListByEmpId(Convert.ToInt32(dr["emp_id"]));if (dtwork.Rows.Count > 0){dr["工作起止日期1"] = dtwork.Rows[0]["UWPeriod"];dr["工作情况1"] = dtwork.Rows[0]["UWCompany"];dr["离职原因1"] = dtwork.Rows[0]["UWLeaveReason"];if (dtwork.Rows.Count > 1){dr["工作起止日期2"] = dtwork.Rows[1]["UWPeriod"];dr["工作情况2"] = dtwork.Rows[1]["UWCompany"];dr["离职原因2"] = dtwork.Rows[1]["UWLeaveReason"];}}}}elsedt = BindTable(chkSelect);dt.Columns.Remove("new_index");dt.Columns.Remove("dutyorder");dt.Columns.Remove("myorder");dt.Columns.Remove("UPEntry");dt.Columns.Remove("emp_id");DotNet.FrameWork.Common.Office.NPOIExcelReader.RenderToExcel(dt, Context, DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".xls");Response.Write("<script>top.dialog.get(window).close();</script>");}catch { }
}

其中代码中所用方法DotNet.FrameWork.Common.Office.NPOIExcelReader.RenderFromExcel所在类请前往下载页面下载——NPOI调用接口

C#实现EXCEL数据的导入导出相关推荐

  1. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  2. PHP利用phpExcel实现Excel数据的导入导出

    phpExcel包的下载地址:http://download.csdn.net/detail/kesixin/9920920 首先先说一下,这段例程是使用在Thinkphp的开发框架上,要是使用在其他 ...

  3. C#winform中操作Excel数据,导入导出功能

    命名空间 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; us ...

  4. excel百万数据如何导入导出

    前景 在项目开发中往往需要使用到数据的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上. 写本文的背景是因为在工作中遇到了大数据的导入和导出,问 ...

  5. easyexcel导入时读不到数据_SpringBoot中EasyExcel实现Excel文件的导入导出

    前言 在我们日常的开发过程中经常会使用Excel文件的形式来批量地上传下载系统数据,我们最常用的工具是Apache poi,但是如果数据到底上百万时,将会造成内存溢出的问题,那么我们怎么去实现百万数据 ...

  6. Java解析xml文件dom4j篇(基于xml配置文件完成Excel数据的导入、导出功能完整实现)

    DOM4J解析XML文件 dom4j是一个Java的XML API,是jdom的升级产品,用来读写XML文件.另外对比其他API读写XML文件,dom4j是一个十分优秀的JavaXML API,具有性 ...

  7. MATLAB中文件的读写和数据的导入导出

    http://blog.163.com/tawney_daylily/blog/static/13614643620111117853933/ 在编写一个程序时,经常需要从外部读入数据,或者将程序运行 ...

  8. excel导入mysql命令行_使用命令行将Excel数据表导入Mysql中的方法小结

    从Excel数据表导入MySQL,已经做过好几次了,但每次都会碰到各种问题:invalid utf8 character string, data too long, ...,浪费了不少时间 为了提高 ...

  9. VB中Excel 2010的导入导出操作

    VB中Excel 2010的导入导出操作 编写人:左丘文 2015-4-11 近来这已是第二篇在讨论VB的相关问题,今天在这里,我想与大家一起分享一下在VB中如何从Excel中导入数据和导出数据到Ex ...

最新文章

  1. SBB:长期施肥影响土壤固氮菌的群落装配过程
  2. mysql init-file参数中语句限制
  3. 数据结构实验之图论二:图的深度遍历(DFS)
  4. Java读取多层级xml文件
  5. [Swagger2]分组和接口注释及小结
  6. centos mysql 服务器_服务器数据库搭建流程(CentOs+mysql)
  7. linux发展前景2018,2018 年 Linux 的 8 个发展预测
  8. 关于运放电路放大倍数的计算
  9. 转载--上下标等特殊符号的输入方法
  10. ROS的学习(十一)ROS的msg和srv
  11. 贝叶斯公式的直观理解(先验概率/后验概率)(未完)
  12. Linux-Discuz安装LAMP
  13. Flink在bilibili的优化与实践
  14. CDN常见问题-Trouble Shooting(二)
  15. DIM抠图网络 Deep Image Matting 论文笔记
  16. linux添加mx记录,在C linux中查询MX记录
  17. YOLOv5-优化器和学习率调整策略
  18. activemq保证消息顺序原理
  19. VC++常用功能开发汇总
  20. 怎样防止羊毛党刷补贴?防护软件大火

热门文章

  1. 【海洋数值预报】海洋数值的简单认识
  2. Android Animation和Animator
  3. python 廖雪峰_据廖雪峰python3教程----python学习第十二天
  4. BUAA OO 第二单元 电梯
  5. elgamal签名算法c语言,elgamal数字签名方案
  6. Halcon 读取图片
  7. Mina IoBuffer的特性介绍
  8. 跨链揭秘:跨链过程中你的资产真的转移了么?
  9. Active Directory 101 - LLMNR
  10. linux 查看ip以及配置局域网ip