• java读取excel文件(.xls,xlsx,csv)


    前提,maven工程通过poi读写excel文件,需要在pom.xml中配置依赖关系:

    在<dependencies>中添加如下代码

        <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.9</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.9</version>
            </dependency>    

    1,页面标签及属性

    input[type="button"]{background-color: #71BCF3;color: white;}
    <form name="form" id="form" method="post" enctype="multipart/form-data">
         <input type="file" name="upload" id="upload"style="display: none;"
             onchange="document.form.path.value=this.value" multiple="multiple" accept=".xls,.xlsx,.csv" />
         <input name="path" id="path" readonly>
         <input type="button" value="医路通数据文件上传" onclick="document.form.upload.click()">
    </form>
    <input type="button" value="确定" onclick="readFile()">
    function readFile(){
    
        var f = document.getElementById("form");
        f.action = "<%=request.getContextPath()%>/mcp/MedicalDate/readExls.action?";
        f.submit();  
    }

    特别注意 : (一),提交文件标签的数据,一定要用form的action提交,否则有数据缺失 (二),form标签中,必须要有 enctype="multipart/form-data"

    2,后台用@RequestParam(value = "upload") MultipartFile upload接文件数据

        @RequestMapping("/readExls")
        public ModelAndView readExls(HttpServletRequest request, HttpServletResponse response, 
                @RequestParam(value = "upload") MultipartFile upload) throws IOException
        {
    
            String oldFile = upload.getOriginalFilename();
            String suffix = oldFile.substring(oldFile.lastIndexOf("."));
    
            log.info("oldFile:"+oldFile);//文件名
            log.info("suffix:"+suffix);//文件后缀
            
            InputStream inStream = upload.getInputStream();//文件流,可直接用
    }    

    3,解析xls后缀文件将数据转换成为List<MedicalWhiteListVO>,以便对数据操作

     public List<MedicalWhiteListVO> readXls(InputStream inStream) throws IOException
        {
            
            InputStream is = inStream;
            HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
            
            List<MedicalWhiteListVO> medicalWhiteListVOs = new ArrayList<MedicalWhiteListVO>();
            MedicalWhiteListVO medicalvo = null;
            
            // Read the Sheet
            HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);
                
            if (hssfSheet == null) {
                //continue;
                return medicalWhiteListVOs;
            }
            
            int lastRowNum = hssfSheet.getLastRowNum();
            
            // Read the Row
            for (int rowNum = 1; rowNum <= lastRowNum; rowNum++) {
                
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                
                if (hssfRow != null) {
                    medicalvo = new MedicalWhiteListVO();
                    
                    HSSFCell holderMobile = hssfRow.getCell(0);
                    HSSFCell holderRealName = hssfRow.getCell(1);
                    
                    HSSFCell holderBirthday = hssfRow.getCell(2);
                    HSSFCell policyApplyDate = hssfRow.getCell(3);
                    
                    medicalvo.setHolderMobile(getValue(holderMobile));
                    medicalvo.setHolderRealName(getValue(holderRealName));
                
                    try
                    {
                        medicalvo.setHolderBirthday(getDate(getValue(holderBirthday)));
                        medicalvo.setPolicyApplyDate(getDate(getValue(policyApplyDate)));
                    } catch (Exception e)
                    {
                        e.printStackTrace();
                        log.info("**日期格式转换异常*2222***");
                    }
                    
                    medicalWhiteListVOs.add(medicalvo);
                }
            }
            return medicalWhiteListVOs;
        }
        public static Date getDate(String date) throws Exception{
                
                Pattern pattern = Pattern.compile("^[0-9]*$");  
                Matcher matcher = pattern.matcher(date);  
                //判断是否可以转换成日期
                if(StringUtils.isNullOrEmpty(date) || !matcher.matches()){
                    Date defaultDate = DateUtils.parse("1900-01-01");
                    System.out.println(DateUtils.format(defaultDate));
                    return defaultDate;
                }  
                
                Double str = Double.valueOf(date);
                
                int numday = (int) Math.round(str);
                
                Calendar d = Calendar.getInstance();  
                d.set(1900, 0, 1);
                d.add(Calendar.DAY_OF_MONTH,numday);
                
                int year = d.get(Calendar.YEAR);
                int month = d.get(Calendar.MONTH) + 1;
                int day = d.get(Calendar.DAY_OF_MONTH)-2;
                
                String dateStr = year+"-"+month+"-"+day;
                
                Date newDate = DateUtils.parse(dateStr);
                
                System.out.println(DateUtils.format(newDate));
                
                return newDate;
            }
        private static String getValue(HSSFCell hssfCell) {
            
            if(hssfCell==null){
                return "";
            }
            
            if (hssfCell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
                return String.valueOf(hssfCell.getBooleanCellValue());
            } else if (hssfCell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                return String.valueOf((int)hssfCell.getNumericCellValue());
            }else {
                return String.valueOf(hssfCell.getStringCellValue()==null?"":hssfCell.getStringCellValue());
            }
        }

    4,解析xlsx后缀文件将数据转换成功List<MedicalWhiteListVO>,以便对数据操作

       public static List<MedicalWhiteListVO> readXlsx(InputStream inStream) throws IOException
        {
            //InputStream is = new FileInputStream(path);
            
            InputStream is = inStream;
            
            XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
            
            List<MedicalWhiteListVO> medicalWhiteListVOs = new ArrayList<MedicalWhiteListVO>();
            MedicalWhiteListVO medicalvo = null;
            
            // Read the Sheet
            XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
                
            if (xssfSheet == null) {
                return medicalWhiteListVOs;
            }
            
            // Read the Row
            for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
                
                XSSFRow xssfRow = xssfSheet.getRow(rowNum);
                
                if (xssfRow != null) {
                    medicalvo = new MedicalWhiteListVO();
                    
                    XSSFCell holderMobile = xssfRow.getCell(0);
                    XSSFCell holderRealName = xssfRow.getCell(1);
                    XSSFCell holderBirthday = xssfRow.getCell(2);
                    XSSFCell policyApplyDate = xssfRow.getCell(3);
                
                    
                    medicalvo.setHolderMobile(getValue(holderMobile));
                    medicalvo.setHolderRealName(getValue(holderRealName));
    
                    try
                    {
                        medicalvo.setHolderBirthday(getDate(getValue(holderBirthday)));
                        medicalvo.setPolicyApplyDate(getDate(getValue(policyApplyDate)));
                    } catch (Exception e)
                    {
                        e.printStackTrace();
                        log.info("**日期格式转换异常*2***");
                    }
                    medicalWhiteListVOs.add(medicalvo);
                }
            }
            
            return medicalWhiteListVOs;
        }
        private static String getValue(XSSFCell xssfRow) {
            if(xssfRow==null){
                return "";
            }
            if (xssfRow.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
                return String.valueOf(xssfRow.getBooleanCellValue());
            } else if (xssfRow.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                return String.valueOf((int)xssfRow.getNumericCellValue());
            }else {
                return String.valueOf(xssfRow.getStringCellValue()==null?"":xssfRow.getStringCellValue());
            }
        }
        public static Date getDate(String date) throws Exception{
            
            Pattern pattern = Pattern.compile("^[0-9]*$");  
            Matcher matcher = pattern.matcher(date);  
            //判断是否可以转换成日期
            if(StringUtils.isNullOrEmpty(date) || !matcher.matches()){
                Date defaultDate = DateUtils.parse("1900-01-01");
                System.out.println(DateUtils.format(defaultDate));
                return defaultDate;
            }  
            
            Double str = Double.valueOf(date);
            
            int numday = (int) Math.round(str);
            
            Calendar d = Calendar.getInstance();  
            d.set(1900, 0, 1);
            d.add(Calendar.DAY_OF_MONTH,numday);
            
            int year = d.get(Calendar.YEAR);
            int month = d.get(Calendar.MONTH) + 1;
            int day = d.get(Calendar.DAY_OF_MONTH)-2;
            
            String dateStr = year+"-"+month+"-"+day;
            
            Date newDate = DateUtils.parse(dateStr);
            
            System.out.println(DateUtils.format(newDate));
            
            return newDate;
        }

    4,解析csv后缀文件将数据转换成功List<MedicalWhiteListVO>,以便对数据操作

    public static List<MedicalWhiteListVO> readCsv(InputStream inStream) throws IOException
        {
            List<MedicalWhiteListVO> medicalWhiteListVOs = new ArrayList<MedicalWhiteListVO>();
            MedicalWhiteListVO medicalvo = null;
            
             try {    
                 //BufferedReader reader=new BufferedReader(new InputStreamReader(new FileInputStream(path),"GBK"));
                 
                 BufferedReader reader=new BufferedReader(new InputStreamReader(inStream,"GBK"));
                    //换成你的文件名   
                    
                 reader.readLine();//第一行信息,为标题信息,不用,如果需要,注释掉   
                String line = null; 
                int num = 0;
                while((line=reader.readLine())!=null){ 
                    num ++;
                    String item[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分  
                    
                    medicalvo = new MedicalWhiteListVO();
                    
                    medicalvo.setHolderMobile(getValue(item,0));
                    medicalvo.setHolderRealName(getValue(item,1));
                    medicalvo.setHolderBirthday(getCsvDate(getValue(item,2)));
                    medicalvo.setPolicyApplyDate(getCsvDate(getValue(item,3)));
                    medicalWhiteListVOs.add(medicalvo);
                    
                } 
                
                Log.info("**一共行数**:"+num);
                    
            } catch (Exception e) {    
                e.printStackTrace();    
            }    
        
            return medicalWhiteListVOs;
        }
        public static String getValue(String[] item,int index){
                
                if(item.length > index){
                    String value = item[index];
                    return value;
                }
                return "";
            }
        public static Date getCsvDate(String item) throws Exception{
            
            if(item.indexOf("/") > 0){
                item = item.replaceAll("/", "-");
            }else if(item.indexOf("年") > 0){
                item = item.replaceAll("年", "-").replaceAll("月", "-").replaceAll("日","");
            }
            
            Date birth = DateUtils.parse(item);
            Date defaultDate = DateUtils.parse("1900-01-01");
            
            if(birth.getTime() <= defaultDate.getTime()){
                return defaultDate;
            }
            return birth;
        }

    注意java通过poi编写excel文件,需要工程共引入的jar有:

    dom4j-1.6.1.jar

    poi-3.9.jar

    poi-ooxml-3.9.jar

    poi-ooxml-schemas-3.9.jar

    xmlbeans-2.3.0.jar

    xml-resolver-1.2.jar

    xmlschema-core-2.0.2.jar

    xstream-1.3.1.jar

    this is all over,i hope it helpful for you ,3q~

  • 相关阅读:
    Netty 源码解析(八): 回到 Channel 的 register 操作
    Netty 源码解析(七): NioEventLoop 工作流程
    SVM入门
    Understanding Neural Networks Through Deep Visualization
    如何直观的解释back propagation算法?
    caffe层解读系列-softmax_loss
    深度学习与计算机视觉系列(10)_细说卷积神经网络
    Ubuntu 14.04 Nvidia显卡驱动手动安装及设置
    贾扬清分享_深度学习框架caffe
    caffe卷积输入通道如何到输出通道
  • 原文地址:https://www.cnblogs.com/yinyl/p/8303817.html
Copyright © 2020-2023  润新知