一:前端

<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导入功能的更多相关文章

  1. 解析大型.NET ERP系统 设计通用Microsoft Excel导入功能

    做企业管理软件很难避免与Microsoft Excel打交道,常常是软件做好了,客户要求说再做一个Excel导入功能.导入Excel数据的功能的难度不大,从Excel列数据栏位的取值,验证值,再导入到 ...

  2. java利用jxl实现Excel导入功能

    本次项目实践基于Spring+SpringMvc+MyBatis框架,简单实现了Excel模板导出.和Excel批量导入的功能.实现过程如下:. 1.maven导入所需jar包 <depende ...

  3. 后端Springboot前端VUE实现Excel导入功能

    功能描述:做的是物联网的项目,Excel导入实现的功能是将Excel中的数据批量的导入AEP系统,再导入我们系统中.目前已经完成该功能,前端还会添加进度条优化.对于导入导出功能,推荐这个Git:htt ...

  4. Java中Excel导入功能实现、excel导入公共方法_POI -

    这是一个思路希望能帮助到大家:如果大家有更好的解决方法希望分享出来 公司导入是这样做的 每个到导入的地方 @Override public List<DataImportMessage> ...

  5. Excel导入功能(Ajaxfileupload)

    前言: 前端采用Easyui+Ajaxfileupload实现 后端采用springmvc框架,其中把解析xml封装成了一个jar包,直接调用即可 准备: 前端需要导入(easyui导入js省略,自行 ...

  6. php Excel 导入功能

    下载excel类地址 https://pan.baidu.com/s/19MqAHUn4RyZ5HEAChyC0jg  密码:mn58 本人用的thinkcmf框架 把类文件放在框架的类文件里面,下面 ...

  7. Java Controller下兼容xls和xlsx且可识别合并单元格的excel导入功能

    1.工具类,读取单元格数据的时候,如果当前单元格是合并单元格,会自动读取合并单元格的值 package com.shjh.core.util; import java.io.IOException; ...

  8. excel 导入功能

    一:示例代码 //InputStream fis = new FileInputStream(tomcaturl+this.awardTask.getFileRoute());//可以通过上述方式获得 ...

  9. React + Antd开发模式下的Excel导入功能

    具体js如下,配合的是antd里面的upload组件,使用的是xlsx插件 npm :  npm install xlsx 插件链接: https://github.com/SheetJS/sheet ...

随机推荐

  1. jsonp跨域原理解析

    前言: 跨域请求是前台开发中经常遇到的场景,但是由于浏览器同源策略,导致A域下普通的http请求没法加载B域下的数据,跨域问题由此产生.但是通过script标签的方式却可以加载非同域下的js,因此可以 ...

  2. 高级I/O之readn和writen函数

    管道.FIFO以及某些设备,特别是终端.网络和STREAMS设备有下列两种性质: (1)一次read操作所返回的数据可能少于所要求的数据,即使还没有达到文件尾端也可能是这样.这不是一个错误,应当继续读 ...

  3. SMI接口,SMI帧结构,MDC/MDIO

    转载:http://blog.csdn.net/zyboy2000/article/details/7442464 SMI全称是串行管理接口(Serial Management Interface). ...

  4. 在 CentOS 中编译安装 VIM 7.3

    转载:http://blog.csdn.net/zhanglyung/article/details/6204574 默认安装的 Vim 不带有多字符支持,所以不支持中文.无论是将 CentOS 本来 ...

  5. ASP.NET 之 网页快照 (DrawToBitmap)

    一.添加引用 在解决方案上单击右键,选择“Add Reference...”,添加“System.Windows.Forms”,添加完后,Web.Config 中应该有类似下面的内容: <sys ...

  6. 杂乱无章之javascript(二)

    1.浏览器与事件事件通常是由浏览器所产生,不同的浏览器会产生的事件也有所不同,即使同一浏览器不同版本所产生的事件也有不同.以下为HTML4.01中的事件 2.error事件:它可以调用一个错误处理函数 ...

  7. Visual studio 2012 添加 GitHub

    文件-新建项目

  8. Codeforces Round #190 (Div. 2) 水果俩水题

    后天考试,今天做题,我真佩服自己... 这次又只A俩水题... orz各路神犇... 话说这次模拟题挺多... 半个多小时把前面俩水题做完,然后卡C,和往常一样,题目看懂做不出来... A: 算是模拟 ...

  9. PHP正则提取或替换img标记属性实现文章预览

    今天在想如何实现文章预览时,如果文章里面包含照片,那么就选取第一张照片作为预览图,如果没有照片,则截取文章的头150个字作为预览文字,但是因为保存在数据库的文章都是以富文本的形式,没办法直接提取,在网 ...

  10. CF Two Buttons (BFS)

    Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...