实现功能是,用户可以直接导入对应数据,或者用户下载模板,填写数据,导入模板数据。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. SurfaceView

    我们先来看下官方API对SurfaceView的介绍 SurfaceView的API介绍 Provides a dedicated drawing surface embedded inside of ...

  2. Android px、dp、sp之间相互转换

    dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖 ...

  3. 62个Android Studio小技巧合集

    1书签(Bookmarks) 描述:这是一个很有用的功能,让你可以在某处做个标记(书签),方便后面再跳转到此处. 调用:Menu → Navigate → Bookmarks 快捷键: 添加/移除书签 ...

  4. Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  5. mysql一些有用的链接

    1.mysql安装:http://jingyan.baidu.com/article/f79b7cb35c0f439144023e38.html

  6. 从两个平方算法到分治算法-java

    先来看看问题的来源,假设有这么一个数组: 1 2 -5 4 -2 3 -3 4 -15 我们要求出其中连续字数组的和的最大值 例如这么可以很明显看出 4+ –2 + 3 + –3 + 4 = 6 所有 ...

  7. AngularJS学习之SQL

    1.使用PHP从MySQL中读取数据: <div ng-app="myApp" ng-controller="customersCtrl" > &l ...

  8. 服装PDA软件|服装销售开单PDA管理软件|服装PDA管理系统|服装PDA点货系统|服装移动POS系统

    浩瀚软件为了更好服务于广大批发客户群体进行销售.盘点.调拨配送等.深圳浩瀚软件推出基于无线网络版移动PDA销售开单系统.该系统支持无线3G.WIFI.GPRS系统,用户可以手持PDA在无线网络连接状态 ...

  9. angular.bind() 函数

    angular.bind bind 函数有三个参数, 参一:是一个对象 参二:是一个 function 参三:是用来给参二传参数的,可写可不写,看你心情 参数也可以在调用函数的时候传,也可以当做第三个 ...

  10. Codeforces Round #336 (Div. 2)

    水 A - Saitama Destroys Hotel 简单的模拟,小贪心.其实只要求max (ans, t + f); #include <bits/stdc++.h> using n ...