Excel导入功能
一:前端
<t:dgToolBar title="Excel题库导入" icon="icon-search" onclick="questionImportListImportXls()"></t:dgToolBar> <script type="text/javascript" charset="utf-8"> function questionImportListImportXls() { openuploadwin('Excel题库导入', 'xueBaQuestionController.do?upload', "questionImportList"); } </script>
二:openuploadwin
/** * 创建上传页面窗口 * * @param title * @param addurl * @param saveurl */ function openuploadwin(title, url,name,width, height) { gridname=name; $.dialog({ content: 'url:'+url, cache:false, button: [ { name: '开始上传', callback: function(){ iframe = this.iframe.contentWindow; iframe.upload(); return false; }, focus: true }, { name: '取消上传', callback: function(){ iframe = this.iframe.contentWindow; iframe.cancel(); } } ] }).zindex(); }
三:上传页面
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@include file="/context/mytags.jsp"%> <!DOCTYPE html> <html> <head> <title>Excel题库导入</title> <t:base type="jquery,easyui,tools"></t:base> </head> <body style="overflow-y: hidden" scroll="no"> <t:formvalid formid="formobj" layout="div" dialog="true" beforeSubmit="upload"> <fieldset class="step"> <div class="form"><t:upload name="fiels" buttonText="选择要导入的文件" uploader="xueBaQuestionController.do?importExcel" extend="*.xls;*.xlsx" id="file_upload" formData="documentTitle"></t:upload></div> <div class="form" id="filediv" style="height: 50px"></div> </fieldset> </t:formvalid> </body> </html>
四:xueBaQuestionController处理导入题库
@RequestMapping(params = "upload") public ModelAndView upload(HttpServletRequest req) { return new ModelAndView("weixin/shyd/happycampus/xueba/questionUpload"); } @RequestMapping(params = "importExcel", method = RequestMethod.POST) @ResponseBody public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) { AjaxJson j = new AjaxJson(); MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { MultipartFile file = entity.getValue();// 获取上传文件对象 ImportParams params = new ImportParams(); params.setTitleRows(0); params.setSecondTitleRows(1); params.setNeedSave(false); try { List<XueBaQuestionEntity> questionList = GetAllImportQuestion(file.getInputStream()); for (XueBaQuestionEntity question : questionList) { if(question.getContent()!=null){ xueBaQuestionService.saveQuestion(question); } } j.setMsg("文件导入成功!"); } catch (Exception e) { j.setMsg("文件导入失败!"); logger.error(ExceptionUtil.getExceptionMessage(e)); }finally{ try { file.getInputStream().close(); } catch (IOException e) { e.printStackTrace(); } } } return j; } private List<XueBaQuestionEntity> GetAllImportQuestion(InputStream inputstream) { POIFSFileSystem fs; HSSFWorkbook wb; HSSFSheet sheet; HSSFRow row; List<XueBaQuestionEntity> questionList = new ArrayList<XueBaQuestionEntity>(); List<XueBaOptionEntity> optionList; XueBaQuestionEntity question = null; try{ fs = new POIFSFileSystem(inputstream); wb = new HSSFWorkbook(fs); /** 遍历sheet **/ for (int i = 0; i < wb.getNumberOfSheets(); i++) { /** 获得当前sheet **/ sheet = wb.getSheetAt(i); int num = 1; for (int j = 1; j < sheet.getPhysicalNumberOfRows() ; j++) { num++; try{ question = new XueBaQuestionEntity(); optionList = new ArrayList<XueBaOptionEntity>(); /** 获得当前行情 **/ row = sheet.getRow(j); if(row != null){ String qContent = getCellFormatValue(row.getCell(0)).trim(); String aOption = getCellFormatValue(row.getCell(1)).trim(); //题目或A选项为空就不保存 if(StringUtil.isEmpty(qContent) || StringUtil.isEmpty(aOption)){ logger.info("题库第" + num + "行题库或A选项为空,未保存"); continue; } String bOption = getCellFormatValue(row.getCell(2)).trim(); String cOption = getCellFormatValue(row.getCell(3)).trim(); String dOption = getCellFormatValue(row.getCell(4)).trim(); String eOption = getCellFormatValue(row.getCell(5)).trim(); String answer = getCellFormatValue(row.getCell(6)).trim(); System.out.println("qcontent:"+qContent); /* 赋值问题实体 */ question.setContent(qContent); if(answer.indexOf(",")>0){ question.setType(1); }else{ question.setType(0); } question.setAnswer(answer); //赋值选项实体 if (StringUtil.isNotEmpty(aOption)) { XueBaOptionEntity aOptionEntity = new XueBaOptionEntity(); aOptionEntity = DealOption(aOptionEntity,aOption); optionList.add(aOptionEntity); } if (StringUtil.isNotEmpty(bOption)) { XueBaOptionEntity bOptionEntity = new XueBaOptionEntity(); bOptionEntity = DealOption(bOptionEntity,bOption); optionList.add(bOptionEntity); } if (StringUtil.isNotEmpty(cOption)) { XueBaOptionEntity cOptionEntity = new XueBaOptionEntity(); cOptionEntity = DealOption(cOptionEntity,cOption); optionList.add(cOptionEntity); } if (StringUtil.isNotEmpty(dOption)) { XueBaOptionEntity dOptionEntity = new XueBaOptionEntity(); dOptionEntity = DealOption(dOptionEntity,dOption); optionList.add(dOptionEntity); } if (StringUtil.isNotEmpty(eOption)) { XueBaOptionEntity eOptionEntity = new XueBaOptionEntity(); eOptionEntity = DealOption(eOptionEntity,eOption); optionList.add(eOptionEntity); } question.setXueBaOptionList(optionList); questionList.add(question); } }catch (Exception e) { e.printStackTrace(); logger.info("题库第" + num + "行解析异常"); } } } }catch (Exception e) { e.printStackTrace(); } return questionList; } private XueBaOptionEntity DealOption(XueBaOptionEntity optionEntity, String option) { int start = option.indexOf("、"); // System.out.println("option:"+option+" start:"+start); String optionTitle = option.substring(0, start); String optionContent = option.substring(start+1); optionEntity.setTitle(optionTitle); optionEntity.setContent(optionContent); return optionEntity; } private String getCellFormatValue(HSSFCell cell) { String cellvalue = ""; if (cell != null) { // 判断当前Cell的Type switch (cell.getCellType()) { // 如果当前Cell的Type为NUMERIC case HSSFCell.CELL_TYPE_NUMERIC: case HSSFCell.CELL_TYPE_FORMULA: { // 判断当前的cell是否为Date if (HSSFDateUtil.isCellDateFormatted(cell)) { // 如果是Date类型则,转化为Data格式 // 方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00 // cellvalue = cell.getDateCellValue().toLocaleString(); // 方法2:这样子的data格式是不带带时分秒的:2011-10-12 Date date = cell.getDateCellValue(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); cellvalue = sdf.format(date); } // 如果是纯数字 else { // 取得当前Cell的数值 cellvalue = String.valueOf(cell.getNumericCellValue()); } break; } // 如果当前Cell的Type为STRIN case HSSFCell.CELL_TYPE_STRING: // 取得当前的Cell字符串 cellvalue = cell.getRichStringCellValue().getString(); break; // 默认的Cell值 default: cellvalue = " "; } } else { cellvalue = ""; } return cellvalue; }
Excel导入功能的更多相关文章
- 解析大型.NET ERP系统 设计通用Microsoft Excel导入功能
做企业管理软件很难避免与Microsoft Excel打交道,常常是软件做好了,客户要求说再做一个Excel导入功能.导入Excel数据的功能的难度不大,从Excel列数据栏位的取值,验证值,再导入到 ...
- java利用jxl实现Excel导入功能
本次项目实践基于Spring+SpringMvc+MyBatis框架,简单实现了Excel模板导出.和Excel批量导入的功能.实现过程如下:. 1.maven导入所需jar包 <depende ...
- 后端Springboot前端VUE实现Excel导入功能
功能描述:做的是物联网的项目,Excel导入实现的功能是将Excel中的数据批量的导入AEP系统,再导入我们系统中.目前已经完成该功能,前端还会添加进度条优化.对于导入导出功能,推荐这个Git:htt ...
- Java中Excel导入功能实现、excel导入公共方法_POI -
这是一个思路希望能帮助到大家:如果大家有更好的解决方法希望分享出来 公司导入是这样做的 每个到导入的地方 @Override public List<DataImportMessage> ...
- Excel导入功能(Ajaxfileupload)
前言: 前端采用Easyui+Ajaxfileupload实现 后端采用springmvc框架,其中把解析xml封装成了一个jar包,直接调用即可 准备: 前端需要导入(easyui导入js省略,自行 ...
- php Excel 导入功能
下载excel类地址 https://pan.baidu.com/s/19MqAHUn4RyZ5HEAChyC0jg 密码:mn58 本人用的thinkcmf框架 把类文件放在框架的类文件里面,下面 ...
- Java Controller下兼容xls和xlsx且可识别合并单元格的excel导入功能
1.工具类,读取单元格数据的时候,如果当前单元格是合并单元格,会自动读取合并单元格的值 package com.shjh.core.util; import java.io.IOException; ...
- excel 导入功能
一:示例代码 //InputStream fis = new FileInputStream(tomcaturl+this.awardTask.getFileRoute());//可以通过上述方式获得 ...
- React + Antd开发模式下的Excel导入功能
具体js如下,配合的是antd里面的upload组件,使用的是xlsx插件 npm : npm install xlsx 插件链接: https://github.com/SheetJS/sheet ...
随机推荐
- VBA Excel 单元格操作
1. 设置单元格边框: .Range("A3:M" & l + 1).SelectWith Selection.Borders() .LineStyle = xlConti ...
- js自动提交按钮
document.forms['alipaysubmit'].submit(); <form id='alipaysubmit' name='alipaysubmit' action='' me ...
- Debian下的PPPOE服务器配置
参考: http://blog.csdn.net/zhangwenjianqin/article/details/7655375 http://blog.sina.com.cn/s/blog_8043 ...
- 小白日记2:kali渗透测试之被动信息收集(一)
一.被动信息收集 被动信息收集指的是通过公开渠道可获得的信息,与目标系统不产生直接交互,尽量避免留下一切痕迹的信息探测.被动探测技术收集的信息可以大致分为两类, 即配置信息和状态信息. 被动探测可收集 ...
- 深入理解windows
阿猫翻译的,用作备忘 深入理解windows——session.window stations.desktops 翻译自:http://www.brianbondy.com/blog/id/100/ ...
- 错误与修复:ASP.NET无法检测IE10,导致_doPostBack未定义JavaScript错误,恒处于FF5卷动条位置
浏览器版本号继续升级过程中.IE9诞生了,IE10 也即将问世,火狐5和6已经发布了,而7和8也快出现了,Opera已经到了11,Chrome还在继续,我也不知道,应该总在14和50之间吧.不管怎样, ...
- AngularJs学习经验汇集
>>关于ng-include 有时候你会发现你用这个指令想要加载某个模板总是加载不出来,url明明是对的,页面还是一片空白,这里有一个细节要注意以下: <div ng-include ...
- LeetCode 344
Reverse String Write a function that takes a string as input and returns the string reversed. Exampl ...
- 关于hkcmd.exe造成的和Eclipse之间热键冲突
可能是自己新买的笔记本比较强大,显卡也比较牛叉.当使用一些常用的Eclipse快捷键的时候Eclipse本身没有反应,反而显示器有了反应. 经常用的Eclispse中的快捷键Ctrl+Alt+↑ 和C ...
- hihocoder 1237 Farthest Point
#1237 : Farthest Point 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 Given a circle on a two-dimentional pla ...