实现功能是,用户可以直接导入对应数据,或者用户下载模板,填写数据,导入模板数据。easyui实现

前台页面

                                    {
text : '日清导入',
iconCls : 'icon-print',
handler : function(){
$('#import').dialog('open');
} }
        <div id = "import" title="员工信息导入" modal=true draggable=true align="center" class="easyui-dialog" closed=true style="width: 400px">
<form id="importForm" method="post" enctype="multipart/form-data">
<table id="importTable" align="center">
<tr>
<td align="center" colspan="2">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上传:<input id = "myFile" name="myFile" type="file"></input>
</td> </tr> <tr>
<td align ="center" colspan="2"><a id="download" href="<%=basePath %>import_template/template-dayrecruit.xls" class="easyui-linkbutton" >模板下载</a>&nbsp;&nbsp;&nbsp;
<a id="upload" class="easyui-linkbutton">上传</a>&nbsp;&nbsp;&nbsp;
<a id="importCancel" class="easyui-linkbutton">取消</a>&nbsp;&nbsp;</td>
</tr>
</table>
</form>
</div>

以上代码加颜色的是特别注意的点。上传文件一定加这些声明,否则不可实现。点击模板下载可以直接在我们根路径下找到模板,并下载。

具体的后台代码是:

@RequestMapping(value = "/imp", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")
public @ResponseBody String imp(@RequestParam MultipartFile myFile,//这里会直接以流文件形式接收上传数据
HttpServletRequest request, HttpSession session) throws Exception { Account account = this.getStaticAccount();
if (myFile == null || myFile.getSize() == 0) {
return "未选择任何文件,请选择文件后上传!";
}
String fileType = myFile.getOriginalFilename().substring(
myFile.getOriginalFilename().lastIndexOf("."));
if (!fileType.equals(".xls") && !fileType.equals(".xlsx")) {
return "文件格式错误,请上传.xls或.xlsx格式文件!";
}
//String path = CommonsMethod.getProjectPath() ;
String path=request.getSession()
.getServletContext().getRealPath("/")
+ "/importReserveExcel/";
String fileattr = CommonsMethod.getNowCorrect2Millisecond()
+ myFile.getOriginalFilename().substring(
myFile.getOriginalFilename().lastIndexOf("."));
final File targetFile = new File(path, fileattr);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
try {
myFile.transferTo(targetFile);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} ArrayList<Object> dataList = new ArrayList<Object>();
try {
dataList = dayRecruitService.readExcel(
targetFile.getAbsolutePath(), 4);
} catch (Exception e) {
return e.getMessage();
}
try {
String failImport = dayRecruitService.importDayrecruit(
dataList, account);
} catch (RuntimeException e) {
return e.getMessage();
} catch (Exception e) {
return "请仔细核对上传格式(参考备注)";
}
return "上传成功";
} private static final String[] headers = new String[] {"日清日期","备注","面试人数","入职人数","招聘企业"};

readExcel代码:把数据先读到一个dayrecruit模板中 原因是当前读的数据不是直接向数据库中存的数据。

public ArrayList<Object> readExcel(String absolutePath, int i)throws Exception {
// TODO Auto-generated method stub ExcelOperations oper = new ExcelOperations();
ArrayList<Object> list = oper.readExcel(absolutePath,
Template_DayRecruit.class, columnHeaders,i ); return list;
} public static final String[] columnHeaders = { "date",
"remarks", "viewerNu",
"entryNu", "customerName"};

正式读取excle数据代码为

public ArrayList<Object> readExcel(String filePath, Class entity,
String[] columnHeads, int noReadSize) throws Exception {
ArrayList<Method> list = new ArrayList<Method>();
ArrayList<Object> objs = new ArrayList<Object>(); try {
for (int i = 0; i < columnHeads.length; i++) {
char f = columnHeads[i].charAt(0);
if (!Character.isUpperCase(f)) {
columnHeads[i] = String.valueOf(Character.toUpperCase(f))
+ columnHeads[i].substring(1);
}
Method methodGet = entity.getMethod("get" + columnHeads[i]);
Method methodSet = entity.getMethod("set" + columnHeads[i], methodGet.getReturnType());
list.add(methodSet);
}
InputStream inputstream = new FileInputStream(filePath);
Workbook wb = WorkbookFactory.create(inputstream);
Sheet sheet1 = wb.getSheetAt(0);
for (int i = 1; i <= sheet1.getLastRowNum() - noReadSize; i++) {
try { Object obj = entity.newInstance();
Cell cell = null;
for (int k = 0; k < list.size(); k ++) {
cell = sheet1.getRow(i).getCell(k);
if(cell.getCellType() == 0){
//判断是否为日期
if(HSSFDateUtil.isCellDateFormatted(cell)){
SimpleDateFormat sdf = null;
if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
.getBuiltinFormat("h:mm")) {
sdf = new SimpleDateFormat("HH:mm");
} else {// 日期
sdf = new SimpleDateFormat("yyyy-MM-dd");
}
Date date = cell.getDateCellValue();
cell.setCellValue(sdf.format(date)); }else{
double value = cell.getNumericCellValue();
CellStyle style = cell.getCellStyle();
DecimalFormat format = new DecimalFormat();
String temp = style.getDataFormatString();
// 单元格设置成常规
if (temp.equals("General")) {
format.applyPattern("#");
}
cell.setCellValue(format.format(value)); }
}
list.get(k).invoke(obj, cell.toString());
}
objs.add(obj);
} catch (Exception e) {
e.printStackTrace();
throw new Exception("Excel 文件第" + i + "行格式错误");
}
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
return objs;
}

然后调用import方法,里面会验证需要验证的数据。如果有一条没有通过验证那么所有的数据将会回滚操作。这主要牵扯到了事务管理。

    public String importDayrecruit(List<Object> dataList, Account user)
throws Exception { String failImport = "";
if (dataList != null && dataList.size() > 0) { //根据公司user找到对应公司 根据公司找到对应的 招聘企业 根据招聘企业
Organization org = dayRecruitDAO.findOrganizationById(user.getOrganization().getId()); List<EnterpriseCustomer> customers = dayRecruitDAO.findAllEnterpriseCustomerByOrg(user.getOrganization().getId()); for (int i = 0; i < dataList.size(); i++) {
DayRecruit dayRec = new DayRecruit();
Template_DayRecruit t_dayRecruit = new Template_DayRecruit();
t_dayRecruit = (Template_DayRecruit) dataList.get(i);
dayRec.setWriter(user.getLoginName());
dayRec.setDatatime(new Date());
dayRec.setRemarks(t_dayRecruit.getRemarks().trim());
//dayRec.
//验证招聘日期
if(isValidDate(t_dayRecruit.getDate().trim()) && StringUtils.isNotBlank(t_dayRecruit.getDate().trim())){
dayRec.setDate(t_dayRecruit.getDate().toString()); }else throw new RuntimeException("第" + (i + 2)
+ "行填写招聘日清日期有误,请重新确定");
//验证填写人
/* if(StringUtils.isNotBlank(dayRec.getWriter()) && dayRec.getWriter().equals(user.getUserName())){
dayRec.setWriter(dayRec.getWriter().trim());
}
else{
throw new RuntimeException("第" + (i + 2)
+ "行填写输入人有误,请填写您的登录账号,请重新确定");
}*/
//验证面试人数
if(isNumeric(t_dayRecruit.getViewerNu().trim()) && StringUtils.isNotBlank(t_dayRecruit.getViewerNu().trim())){
dayRec.setViewerNu(t_dayRecruit.getViewerNu().trim());
}
else throw new RuntimeException("第" + (i + 2)
+ "行填写面试人数有误,请重新确定");
//验证入职人数
if(isNumeric(t_dayRecruit.getEntryNu().trim()) && StringUtils.isNotBlank(t_dayRecruit.getEntryNu().trim())){ int re = Double.valueOf(t_dayRecruit.getEntryNu().trim()).compareTo(Double.valueOf(t_dayRecruit.getViewerNu().trim()));
if(re <1){
dayRec.setEntryNu(t_dayRecruit.getEntryNu().trim()); }
else {
throw new RuntimeException("第" + (i + 2)
+ "行入职人数大于面试人数,请重新确定");
}
}
else throw new RuntimeException("第" + (i + 2)
+ "行填写入职人数有误,请重新确定"); //验证招聘企业 从模板中获取招聘企业的名字 查询出 此公司所有的招聘企业 对应的话 取 招聘企业这个对象赋值给dayR // 验证所属公司
if(StringUtils.isNoneBlank(t_dayRecruit.getCustomerName().trim())){
boolean isOK = false;
if(customers != null && customers.size()>0){
for(int j =0;j<customers.size();j++){
if(customers.get(j).getEnterpriseName().equals(t_dayRecruit.getCustomerName().trim())){ dayRec.setCustomer(customers.get(j));
isOK = true;
break;//跳出当前循环
} } }
if (!isOK) {
throw new RuntimeException("第" + (i + 2)
+ "行招聘企业输入有误,请重新确定");
}
} dayRecruitDAO.add(dayRec);
}
} else {
throw new RuntimeException("导入数据为空");
}
return failImport;
}

这样数据就插入到对应数据库。完成导入操作。

导入excle数据将excle数据插入到数据库的更多相关文章

  1. 将excle表中得数据生成insert语句插入到数据库中

    第一步:输入公式 第二步:拽住右下角得+往下拖拽

  2. Python datatime 格式转换,插入MySQL数据库

    Python datatime 格式转换,插入MySQL数据库 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-11-2 ...

  3. Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库

    Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...

  4. 【Excle】动态更新数据下拉菜单

    现在我们制作了一个简单的下拉菜单,如下: 但是随着公司的逐渐扩大,部门也变得多了,目前我是把数据范围写死的 ,所有每次添加一个部门,就得修改数据范围,那么现在我们不想修改这个范围了,想让他每次添加部门 ...

  5. 【Excle数据透视】二维数据如何创建数据透视表

    二维数据在创建数据透视表的时候,可能会给你带来一些麻烦,没法创建,会丢失维度,那怎么办呢? 解决办法:使用数据透视表和数据透视图向导即可创建 具体操作如下: 按下[Alt+D+P],出现如下界面 选择 ...

  6. [转] JAVA读取excel数据(插入oracle数据库)

    原文地址:http://blog.csdn.net/zczzsq/article/details/16803349 本实例做的是读取execl(只能读取.xls的execl,即只能读取03版的),如果 ...

  7. 使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法

            Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...

  8. 14.插入数据、复制数据--SQL

    一.插入完整的行 要求指定表名和插入到新行中的值 INSERT INTO Customers ', 'Toy Land', '123 Any Street', 'New York', 'NY', ', ...

  9. C# 数据批量插入到数据库SqlBulkCopy(源数据类型:List<T> Or DataTable)

      /*_____________________ List<T>类型数据 To Sql_______________________________*/ /// <summary& ...

  10. 从零自学Hadoop(17):Hive数据导入导出,集群数据迁移下

    阅读目录 序 将查询的结果写入文件系统 集群数据迁移一 集群数据迁移二 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephis ...

随机推荐

  1. LoadRunner关联之学习笔记

    去银行办业务,进银行的门,大堂经理给你一张业务号,拿着这张业务号,去柜台办理业务.--录制下来 第二天又去银行,还是拿着这张业务号,去柜台办理业务,柜员就不理你了,因为这张业务号是昨天的.--回放过程 ...

  2. 计数排序-java

    今天看了一本书,书里有道题,题目很常见,排序,明了点说: 需求:输入:最多有n个正整数,每个数都小于n, n为107 ,没有重复的整数 输出:按升序排列 思路:假设有一组集合 {1,3,5,6,11, ...

  3. winmail服务器启动失败 无法启动

    1.解决句柄问题:打开命令行:开始 -> 运行-> 输入 cmd -> 确定.切换命令目录至winmail的服务目录,我的是:E:\htdocs\Winmail\server\> ...

  4. POJ1201 Intervals差分约束系统(最短路)

    Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a p ...

  5. CSS background 属性

    CSS 参考手册 实例 如何在一个声明中设置所有背景属性: body { background: #00FF00 url(bgimage.gif) no-repeat fixed top; } 亲自试 ...

  6. P2P的理解

    B2C是Business-to-Customer的缩写,而其中文简称为“商对客”.“商对客”是电子商务的一种模式,也就是通常说的商业零售,直接面向消费者销售产品和服务.这种形式的电子商务一般以网络零售 ...

  7. 数据结构:后缀自动机 WJMZBMR讲稿的整理和注释

    链接放在这里,有点难理解,至少我个人是的. 后缀自动机是一种有限状态自动机,其功能是识别字符串是否是母串的后缀.它能解决的问题当然不仅仅是判断是不是后缀这种事,跟字符串的连续子串有关的问题都可以往这个 ...

  8. java语言特性概述

    一.前言 我们都知道java是面向对象的编程,其中四个基本特性:抽象.封装.继承.多态.这四个特性,概括起来可以这么理解,抽象.封装.继承是多态的基础,多态是抽象.封装.继承的表现. 二. JAVA ...

  9. iframe更新与隐藏

    http://blog.sina.com.cn/s/blog_535161d80100aho6.html 从近期项目中抽取出来的一个关于iframe进行控制的代码,不是很全,不过大体功能已经显示出来了 ...

  10. Codeforces Round #251 (Div. 2) C. Devu and Partitioning of the Array

    注意p的边界情况,p为0,或者 p为k 奇数+偶数 = 奇数 奇数+奇数 = 偶数 #include <iostream> #include <vector> #include ...