• Excel导入保存附件和解析数据


    Excel导入保存附件和解析数据

    一,前端上传附件的组件

    1、先给一个下载模板的按钮

          // 下载Excel模板
            downLoadExcel: function () {
                window.open(GLOBAL_CONFIG.webSiteRoot + "/main/common/files/xxx.xls");
            },

    2、Element上传控件

                  <el-upload ref="upload"
                                       :action="importFileUrl"
                                       :before-upload="beforeUpload"
                                       :multiple="false"
                                       :on-success="uploadSuccess"
                                       :on-error="uploadFail"
                                       :show-file-list="false"
                                       style="display: inline-block;">
                                <el-button type="primary" icon="el-icon-plus" size="medium">导入Excel</el-button>
                            </el-upload>

     3、js中上传有关

    var vue = new Vue({
        el: '#app',
        data: {
            // 导入的后台接口地址
            importFileUrl : '/excellImport/importFile',
    
    
    methods:{
    // 上传前对文件的类型和大小判断
            beforeUpload : function (file) {
              var self = this;
              const extension = file.name.split('.')[1] === 'xls'
              const extension2 = file.name.split('.')[1] === 'xlsx'
              const isLt2M = file.size / 1024 / 1024 < 50
              if (!extension && !extension2 ) {
                alert('上传文件只能是 xls、xlsx 格式!')
              }
              if (!isLt2M) {
                alert('上传文件大小不能超过 50MB!')
              }
              console.log(file);
              return extension || extension2  && isLt2M
            },
    // 文件上传成功
            uploadSuccess: function (response, file, flieList) {
                this.initTable();
                console.log(response);
                alert(response.msg);
            },
    // 文件上传失败
            uploadFail: function (err, file, fileList) {
                alert('上传失败,请重试!');
            },
    
    }

    其中,data 中的 importFileUrl : '/excellImport/importFile', 就是后台的接口地址;

    二、java代码

    @SuppressWarnings({"unchecked", "finally" })
        @ResponseBody
        @RequestMapping(value="/importFile",method= RequestMethod.POST)
        @ApiOperation("导入excel文件操作接口")
        public JsonResult<XfImportexcelModel> importFile(HttpServletRequest request, HttpServletResponse response, 
                @RequestParam("file") MultipartFile[] excelFile, XfUser user) throws AccessExpiredException, DaoAccessException, Exception {
            System.out.println("==========================================-进入导入excel文件操作接口==========================");
            JsonResult<XfImportexcelModel> jsonResult = JsonResult.getDefaultResult();
            try {
                response.setCharacterEncoding("utf-8");
                // 手动调用PrintWriter向客户端输入返回值,若本方法是有返回值的,则不需要
    //            PrintWriter out = response.getWriter();
                
                //文件保存本地目录路径
                String savePath = request.getSession().getServletContext().getRealPath(PATH_LINE) + "main"+PATH_LINE+"xxx"+PATH_LINE+"xxx"+PATH_LINE+"xxx"+PATH_LINE+"upload";
                //文件保存目录URL
                String saveUrl = request.getContextPath() + PATH_LINE +"upload"+PATH_LINE+"file"+PATH_LINE;
                
                if(!ServletFileUpload.isMultipartContent(request)){
    //                out.print(getError("请选择文件。"));
    //                out.close();
                    jsonResult.setMsg("请选择文件。");
                    return jsonResult;
                }
                //检查目录
                File uploadDir = new File(savePath);
                if(!uploadDir.isDirectory()){ 
                    uploadDir.mkdirs(); //目录不存在就创建目录
                }
                //检查目录写权限
                if(!uploadDir.canWrite()){
    //                out.print(getError("上传目录没有写权限。"));
    //                out.close();
                    jsonResult.setMsg("上传目录没有写权限。");
                    return jsonResult;
                }
                
                String dirName = request.getParameter("dir");
                if (dirName == null) {
                    dirName = "file";
                }
                
                //定义允许上传的文件扩展名
                Map<String, String> extMap = new HashMap<String, String>();
                extMap.put("image", "gif,jpg,jpeg,png,bmp");
                extMap.put("flash", "swf,flv");
                extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
                extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,xml,txt,zip,rar,gz,bz2");
                
                if(!extMap.containsKey(dirName)){
    //                out.print(getError("目录名不正确。"));
    //                out.close();
                    jsonResult.setMsg("目录名不正确。");
                    return jsonResult;
                }
                //创建文件夹
                savePath += PATH_LINE+dirName + PATH_LINE;
                saveUrl += PATH_LINE;
                File saveDirFile = new File(savePath);
                if (!saveDirFile.exists()) {
                    saveDirFile.mkdirs(); //保存到项目工程文件夹指定目录中
                }
                
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                String ymd = sdf.format(new Date());
                savePath += ymd + PATH_LINE;
                saveUrl += ymd + PATH_LINE;
                File dirFile = new File(savePath); //存到本地之后在获取解析
                if (!dirFile.exists()) {
                    dirFile.mkdirs();
                }
                
                //最大文件大小
                long maxSize = 10000000;
                
                // 保存文件
                for(MultipartFile iFile : excelFile){
                    String fileName = iFile.getOriginalFilename();
                    
                    //检查文件大小
                    if(iFile.getSize() > maxSize){
    //                    out.print(getError("上传文件大小超过限制。"));
    //                    out.close();
                        jsonResult.setMsg("上传文件大小超过限制。");
                        return jsonResult;
                    }
                    //检查扩展名
                    String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
                    if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){
                        //return getError("上传文件扩展名是不允许的扩展名。
    只允许" + extMap.get(dirName) + "格式。");
    //                    out.print(getError("上传文件扩展名是不允许的扩展名。
    只允许" + extMap.get(dirName) + "格式。"));
    //                    out.close();
                        jsonResult.setMsg("上传文件扩展名是不允许的扩展名。
    只允许" + extMap.get(dirName) + "格式。");
                        return jsonResult;
                    }
                    
                    // 解析Excel数据存入数据库
                    JsonResult<Object> jsonResultHandle  = handleExcelData(iFile, user); //调用另外一个方法解析excel中的数据交互项目生产库
                    // 解析或者入库有问题则反馈到前端
                    if(!jsonResultHandle.getSuccess()){
                        // 返回导入信息到前端页面
                        jsonResult.setSuccess(false);
                        jsonResult.setMsg(jsonResultHandle.getMsg());
                        return jsonResult;
                    }
                    
                    // 返回导入信息到前端页面
                    jsonResult.setMsg(jsonResultHandle.getMsg());
                    
                    SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
                    String newFileName = df.format(new Date()) + "_" + iFile.getName() + "." + fileExt;
                    try{
                        File uploadedFile = new File(savePath, newFileName);
                        
                        // 写入文件
                        FileUtils.copyInputStreamToFile(iFile.getInputStream(), uploadedFile);
                    }catch(Exception e){
    //                    out.print(getError("上传文件失败。"));
    //                    out.close();
                        jsonResult.setMsg("上传文件失败。");
                        return jsonResult;
                    }
                    
                    JSONObject obj = new JSONObject();
                    obj.put("error", 0);
                    obj.put("url", saveUrl + newFileName);
                    
    //                out.print(obj.toJSONString());
    //                out.close();
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                logger.error("", e);
                System.out.println(e);
                
            } finally {
                System.out.println("===========================================结束导入excel文件操作接口==");
                return jsonResult;
            }
            
        }
        
        
        /**
         *  解析Excel数据存入数据库
         *  @param file
         *  @param user
         *  @return    
         */
        @SuppressWarnings("unchecked")
        public JsonResult<Object> handleExcelData(MultipartFile file, XfUser user) throws Exception{
            System.out.println("==================================================开始解析Excel数据存入数据库==");
            // 返回导入的结果信息
            String resultString = "";
            JsonResult<Object> jsonResult = JsonResult.getDefaultResult();
            if (file != null) {
                try {
                    List<ImportexcelParam> ImportexcelParamList = null;
    
                    // 获取解析的excel数据
                    JsonResult<List<List<String>>> JsonResultList = ExcelUtil.parseExcel(file.getInputStream(),
                            file.getOriginalFilename());
                    // 解析有问题反馈到调用地方
                    if(!JsonResultList.getSuccess()){
                        jsonResult.setSuccess(false);
                        jsonResult.setMsg(JsonResultList.getMsg());
                        return jsonResult;
                    }
                    // excel数据解析成功,进行获取和入库处理
                    List<List<List<String>>> resultList = JsonResultList.getData();
                    
                    // 目前只检查第一个sheet
                    if (resultList != null && !resultList.isEmpty()) {
                        for (List<List<String>> sheetList : resultList) {
                            ImportexcelParamList = new ArrayList<>();
                            if (sheetList != null && !sheetList.isEmpty()) {
                                if (sheetList.size() > 200) {
                                    jsonResult.setSuccess(false);
                                    jsonResult.setMsg("单次上传文件记录条数不能超过200条!");
                                    return jsonResult;
                                }
                                if(sheetList.get(0).size() != 20){
                                    jsonResult.setSuccess(false);
                                    jsonResult.setMsg("请使用正确的导入模板!");
                                    return jsonResult;
                                }
                                // 导入开始时间,毫秒
                                long startTime = System.currentTimeMillis();
                                // 记录导入成功的数据条数
                                int successImportNum = 0;
                                // 重复的编号记录
                                String repeatInfo="";
                                for (List<String> rowList : sheetList){
                                    if (!rowList.isEmpty()) {
                                        // 投诉人和投诉内容筛选有效行
                                        if(StringUtils.isNullOrEmpty(rowList.get(13))||StringUtils.isNullOrEmpty(rowList.get(14))){
                                            continue;
                                        }
                                        // 导入数据举报编号去重
                                        XfImportexcel xfImportexcel = iXfImportexcelService.getXfImportexcelByBussinesNo(rowList.get(2));
                                        if (xfImportexcel != null) {
                                            repeatInfo += "【";
                                            repeatInfo += rowList.get(2);
                                            repeatInfo += "】";
                                            continue;
                                        }
                                        ImportexcelParam ImportexcelParam = new ImportexcelParam();
                                        ImportexcelParam.setStatus(rowList.get(0));//状态
                                        ImportexcelParam.setEmergencyLevel(rowList.get(1));//紧急程度
                                        ImportexcelParam.setBussinesNo(rowList.get(2));//业务编号
                                        ImportexcelParam.setCallSysNo(rowList.get(3));//来电编号
                                        ImportexcelParam.setRepeatFlag("初件".equals(rowList.get(4))?false:true);//重复标志
                                        ImportexcelParam.setReplyFlag("未答复".equals(rowList.get(5))?false:true);//答复标志
                                        ImportexcelParam.setProcessUnitName(rowList.get(6));//处理单位
                                        ImportexcelParam.setOperator(rowList.get(7));//经办人
                                        ImportexcelParam.setProcessamento(rowList.get(8));//处理方式
                                        ImportexcelParam.setProcessStatus(rowList.get(9));//处理状态
                                        ImportexcelParam.setCallPhoneNum(rowList.get(10));//来电号码
                                        ImportexcelParam.setLinkTelphone(rowList.get(11));//联系电话
                                        ImportexcelParam.setCreateBy(rowList.get(12));//创建人
                                        ImportexcelParam.setCallPerson(rowList.get(13));//来电人
                                        ImportexcelParam.setComplainContent(rowList.get(14));//投诉内容
                                        ImportexcelParam.setCallDate(StringUtils.isNullOrEmpty(rowList.get(15))?null:TimeUtils.string2Timestamp(DateUtil.YYYY_MM_DD_HH_MM_SS, rowList.get(15)));//来电日期
                                        ImportexcelParam.setCallPhoneNum(rowList.get(16));//来电人数
                                        ImportexcelParam.setItemType(rowList.get(17));//事项分类
                                        ImportexcelParam.setCallPurpose(rowList.get(18));//来电目的
                                        ImportexcelParam.setProcessTimeLimit(StringUtils.isNullOrEmpty(rowList.get(19))?null:TimeUtils.string2Timestamp(DateUtil.YYYY_MM_DD_HH_MM_SS, rowList.get(19)));//处理时限
                                        ImportexcelParamList.add(ImportexcelParam);
                                        
                                    }
                                }
                                // 调用excel数据导入保存业务实现方法
                                successImportNum = iXfImportexcelService.save(ImportexcelParamList, user);
                                // 导入失败条数
                                int failImportNum = ImportexcelParamList.size()-successImportNum;
                                // 导入结束时间,毫秒
                                long endTime = System.currentTimeMillis();
                                if(repeatInfo!=""){
                                    resultString = "成功导入"+successImportNum+"条记录,失败"+failImportNum+"条;共耗时"+(endTime-startTime)+"毫秒;"+repeatInfo+"编号数据已存在";
                                }else{
                                    resultString = "成功导入"+successImportNum+"条记录,失败"+failImportNum+"条;共耗时"+(endTime-startTime)+"毫秒。";
                                }
                                // 解析和入库都无问题,设置sucess和信息反馈
                                jsonResult.setSuccess(true, resultString);
                                System.out.println("================================================="+resultString+"=========");
                                
                            }else{
                                jsonResult.setSuccess(false, "文件没有数据记录");
                            }
                        }
    //                    List<List<String>> sheetList = resultList.get(0);
                        
                        
                    }else{
                        jsonResult.setSuccess(false, "文件没有数据记录");
                    }
                   
                }catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                // String path = "E:/springUpload" + file.getOriginalFilename();
                // 上传
                // file.transferTo(new File(path));
            }else{
                jsonResult.setSuccess(false, "无法获取文件");
            }
            System.out.println("==================================================结束解析Excel数据存入数据库======");
            return jsonResult;
        }

     2、解析Excel封装工具类

    package com.xxx.xx.utils;
    
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.lang3.StringUtils;
    import org.apache.log4j.Logger;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellStyle;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import com.mlsc.fw.common.exception.ParamDataException;
    import com.mlsc.fw.common.utils.DateUtil;
    import com.xxx.fw.web.JsonResult;
    
    public class ExcelUtil {
        private static Logger logger = Logger.getLogger(ExcelUtil.class);
    
        public static final String OFFICE_EXCEL_2003_POSTFIX = "xls";
        public static final String OFFICE_EXCEL_2010_POSTFIX = "xlsx";
        public static final String CELL_TYPE_STRING="String";
    
        /**
         * 适用于第一行是标题行的excel,
         * 
         * resultList --> sheetList --> rowList
         * 
         * @throws Exception
         */
        @SuppressWarnings("unchecked")
        public static JsonResult<List<List<String>>> parseExcel(InputStream in, String suffixName) throws ParamDataException {
            JsonResult<List<List<String>>> jsonResult = JsonResult.getDefaultResult();
            List<List<List<String>>> resultList = new ArrayList<>();
            List<List<String>> sheetList = null;
            List<String> rowList = null;
            String fileType = suffixName.substring(suffixName.lastIndexOf(".") + 1, suffixName.length());
            Workbook wb = null;
            try {
                if (fileType.equalsIgnoreCase(OFFICE_EXCEL_2003_POSTFIX)) {
                    wb = new HSSFWorkbook(in);
                } else if (fileType.equalsIgnoreCase(OFFICE_EXCEL_2010_POSTFIX)) {
                    wb = new XSSFWorkbook(in);
                } else {
                    jsonResult.setSuccess(false);
                    jsonResult.setMsg("请使用正确的导入模板");
                    return jsonResult;
                }
    
                int sheetSize = wb.getNumberOfSheets();
                // 文件中不止一张工作表
                if(sheetSize>1){
                    jsonResult.setSuccess(false);
                    jsonResult.setMsg("请使用正确的导入模板");
                    return jsonResult;
                }
                for (int i = 0; i < sheetSize; i++) {// 遍历sheet页
                    Sheet sheet = wb.getSheetAt(i);
    
                    int rowSize = sheet.getLastRowNum() + 1;
                    if(rowSize<=1){
                        jsonResult.setSuccess(false);
                        jsonResult.setMsg("导入模板没有数据记录");
                        return jsonResult;
                    }
                    sheetList = new ArrayList<>();
                    int columnSize = 0;
                    
                    // 从第一行标题行开始向下遍历行,包括第一行
                    for (int j = 0; j < rowSize; j++) {
                        Row row = sheet.getRow(j);
                        
                        // 遍历第一行作用是为了获取每一行的列数
                        if (j == 0) {
                            // bypass the 1st row
                            columnSize = row.getLastCellNum();
                            continue;
                        }
                        
                        // 略过空行
                        if (row == null) {
                            continue;
                        }
                        rowList = new ArrayList<>();
                        for (int m = 0; m < columnSize; m++) {
    //                        if (m == 0 && (row.getCell(3)==null||row.getCell(3).equals("")||row.getCell(3).getCellType() ==HSSFCell.CELL_TYPE_BLANK) ) {
    //                            break;
    //                        }
                            if (row.getCell(m) != null){
                                rowList.add(getValue(row.getCell(m)));
                            } else {
                                rowList.add("");
                            }
                        }
                        if (rowList.size() == columnSize)
                            sheetList.add(rowList);
                    }
                    resultList.add(sheetList);
                }
    
            } catch (Exception e) {
                logger.error("", e);
                throw new ParamDataException("上传文件内容格式不正确,请检查文件内容格式!");
            } finally {
                if (wb != null) {
                    try {
                        wb.close();
                    } catch (Exception e) {
                        logger.error("关闭Workbook出现异常!", e);
                    }
                }
                if (in != null) {
                    try {
                        in.close();
                    } catch (Exception e) {
                        logger.error("关闭输入流出现异常!", e);
                    }
                }
            }
            jsonResult.setSuccess(true);
            jsonResult.setData(resultList);
            return jsonResult;
        }
    
        public static void exportByTemplate(FileInfo fileInfo, List<DataInfo> dataInfoList, HttpServletResponse response) {
            try {
                setResponseHeader(fileInfo.getGenerateFileName(), response);
                XSSFWorkbook workbook = createWorkBook(fileInfo, dataInfoList, response);
                outputFile(fileInfo, workbook, response);
            } catch (UnsupportedEncodingException e) {
                logger.error("", e);
            }
    
        }
    
        private static void outputFile(FileInfo fileInfo, XSSFWorkbook workbook, HttpServletResponse response) {
            BufferedOutputStream bufferedOutPut = null;
            try {
                OutputStream output = response.getOutputStream();
                bufferedOutPut = new BufferedOutputStream(output);
                bufferedOutPut.flush();
                workbook.write(bufferedOutPut);
            } catch (IOException e) {
                logger.error("", e);
            } finally {
                if (workbook != null) {
                    try {
                        workbook.close();
                    } catch (IOException e) {
                    }
                }
                if (bufferedOutPut != null) {
                    try {
                        bufferedOutPut.close();
                    } catch (IOException e) {
                    }
                }
    
            }
        }
    
        @SuppressWarnings("deprecation")
        private static XSSFWorkbook createWorkBook(FileInfo fileInfo, List<DataInfo> dataInfoList,
                HttpServletResponse response) {
            XSSFWorkbook workbook = null;
    
            try {
                File fi = new File(fileInfo.getTemplatePath() + fileInfo.getTemplateName());
                FileInputStream fs = new FileInputStream(fi);
                // 读取excel模板
                workbook = new XSSFWorkbook(fs);
                if (dataInfoList == null || dataInfoList.size() == 0) {
                    return workbook;
                }
                int rowIndex = 0;
                int columnIndex = 0;
                // sheet
                for (DataInfo dataInfo : dataInfoList) {
                    if(dataInfo.getSheetIndex()==null){
                        continue;
                    }
                    XSSFSheet sheet = workbook.getSheetAt(dataInfo.getSheetIndex());
                    rowIndex = dataInfo.getRowStart();
                    if(StringUtils.isNotEmpty(dataInfo.getModifiedTitle())){
                        CellStyle cs=sheet.getRow(0).getCell(0).getCellStyle();
                        sheet.getRow(0).getCell(0).setCellValue(dataInfo.getModifiedTitle());
                        sheet.getRow(0).getCell(0).setCellStyle(cs);
                    }
                    if (dataInfo.getData() == null || dataInfo.getData().isEmpty()) {
                        continue;
                    }
                    XSSFRow styleRow = null;
                    CellStyle style = null;
                    CellStyle style0 = null;
                    // row
                    for (int rIndex = 0; rIndex < dataInfo.getData().size(); rIndex++) {
                        if (dataInfo.getData().get(rIndex) == null || dataInfo.getData().get(rIndex).length == 0) {
                            continue;
                        }
                        columnIndex = dataInfo.getColumnStart();
                        XSSFRow row = sheet.getRow(rowIndex);
                        if (row == null) {
                            row = sheet.createRow(rowIndex);
                        }
                        if(rIndex==0){
                            styleRow = sheet.getRow(rowIndex);
                        }
    
                        // cell
                        for (int cIndex = 0; cIndex < dataInfo.getColumnLength(); cIndex++) {
                            if(styleRow.getCell(columnIndex)==null){
                                System.out.println(222);
                            }
                            style = styleRow.getCell(columnIndex).getCellStyle();
    
                            if(dataInfo.isGenIndex()){
                                XSSFCell cell0 = row.getCell(0);
                                if(cell0==null){
                                    cell0=row.createCell(0);
                                }
                                cell0.setCellValue(rIndex+1);
                                style0 = styleRow.getCell(0).getCellStyle();
                                cell0.setCellStyle(style0);
                            }
                            XSSFCell cell = row.getCell(columnIndex);
                            if (cell == null) {
                                cell = row.createCell(columnIndex);
                            }
    //                        if(cIndex==17){
    //                            System.out.println(333);
    //                        }
    //                        System.out.println("sheet:"+dataInfo.getSheetIndex()+"/rIndex:"+rIndex+"/cIndex:"+cIndex);
    //                        if(null == dataInfo.getData().get(rIndex)[cIndex]){
    //                            System.out.println(111);
    //                        }
                            if(dataInfo.getTypeMap()!=null && dataInfo.getTypeMap().containsKey(cIndex)){
                                if(CELL_TYPE_STRING.equals(dataInfo.getTypeMap().get(cIndex))){
                                    cell.setCellValue(dataInfo.getData().get(rIndex)[cIndex]);
                                }
                            }else if(null != dataInfo.getData().get(rIndex)[cIndex]
                                    && dataInfo.getData().get(rIndex)[cIndex].matches("^(-?\d+)(\.\d+)?$")){
                                cell.setCellValue(Double.parseDouble(dataInfo.getData().get(rIndex)[cIndex]));
                            }else{
                                cell.setCellValue(dataInfo.getData().get(rIndex)[cIndex]);
                            }
                            cell.setCellStyle(style);
                            columnIndex++;
                        }
                        rowIndex++;
                    }
                }
                List<Integer> hideSheetList=new ArrayList<>();
                for(DataInfo dataInfo : dataInfoList){
                    hideSheetList.add(dataInfo.getSheetIndex());
                }
    
                for(int i=0;i<workbook.getNumberOfSheets();i++){
                    if(!hideSheetList.contains(i)){
                        workbook.setSheetHidden(i, 2);
                    }
                }
    
            } catch (IOException e) {
                logger.error("", e);
            }
            return workbook;
        }
    
    
        @SuppressWarnings("deprecation")
        private static String getValue(Cell cell) {
            DecimalFormat df = new DecimalFormat("#.###");
            if (cell == null) {
                return "";
            }
            switch (cell.getCellType()) {
                case HSSFCell.CELL_TYPE_NUMERIC:
                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
                        SimpleDateFormat sdf = new SimpleDateFormat(DateUtil.YYYY_MM_DD);
                        return sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
                    }
                    return df.format(cell.getNumericCellValue());
                case HSSFCell.CELL_TYPE_STRING:
                    return cell.getStringCellValue();
                case HSSFCell.CELL_TYPE_FORMULA:
                    return cell.getCellFormula();
                case HSSFCell.CELL_TYPE_BLANK:
                    return "";
    
            }
            return "";
        }
    
        @SuppressWarnings("unused")
        public static String  getExcelAcceptDepartment(InputStream in, String suffixName) throws ParamDataException {
            String header = "";
            String fileType = suffixName.substring(suffixName.lastIndexOf(".") + 1, suffixName.length());
            Workbook wb = null;
            try {
                if (fileType.equalsIgnoreCase(OFFICE_EXCEL_2003_POSTFIX)) {
                    wb = new HSSFWorkbook(in);
                } else if (fileType.equalsIgnoreCase(OFFICE_EXCEL_2010_POSTFIX)) {
                    wb = new XSSFWorkbook(in);
                } else {
                    throw new ParamDataException("读取的不是excel文件");
                }
    
                int sheetSize = wb.getNumberOfSheets();
                for (int i = 0; i < sheetSize; i++) {// 遍历sheet页
                    Sheet sheet = wb.getSheetAt(i);
                    header = getValue(sheet.getRow(2).getCell(1)).trim();
                    break;
                }
            } catch (Exception e) {
                logger.error("", e);
                throw new ParamDataException("上传文件内容格式不正确,请检查文件内容格式!");
            } finally {
                if (wb != null) {
                    try {
                        wb.close();
                    } catch (Exception e) {
                        logger.error("关闭Workbook出现异常!", e);
                    }
                }
                if (in != null) {
                    try {
                        in.close();
                    } catch (Exception e) {
                        logger.error("关闭输入流出现异常!", e);
                    }
                }
            }
            return header;
        }
    
        private static void setResponseHeader(String fileName, HttpServletResponse response)
                throws UnsupportedEncodingException {
            response.reset();
            // SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            // String date = sdf.format(new Date());
            // String newFileName=fileName+date;
            // 指定下载的文件名
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            response.setDateHeader("Expires", 0);
        }
    }
  • 相关阅读:
    k8s使用私有镜像仓库
    spark client 配置lzo
    jvm系列(四):jvm调优-命令篇
    mysqldump 备份还原数据库
    df 卡死及ls无法查看文件
    记录一次服务器断电,直接进入救援模式
    nginx开机自启脚本
    mongodb启动关闭脚本
    mongo数据备份恢复
    centos 快速配置网络
  • 原文地址:https://www.cnblogs.com/wmqiang/p/11158857.html
Copyright © 2020-2023  润新知