您的位置:首页 > 编程语言 > Java开发

java读取excel文件中的数据

2017-07-27 18:05 357 查看
 private static List<List<List<String>>> readExcelXlsx(InputStream is) throws IOException{

    String result_s = "";

        //result用来存放从Excel中读取到的数据

        List<List<List<String>>> result = new ArrayList<List<List<String>>>();

        //获得excel文件的IO流

        //InputStream is = new FileInputStream(file);

        //得到后缀为.xlsx的excel对象

        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);

        XSSFFormulaEvaluator  evaluator = new XSSFFormulaEvaluator(xssfWorkbook);  

        //读取每一页

        for(XSSFSheet xssfSheet : xssfWorkbook){

            //resultSheet存放每一页的数据

            List<List<String>> resultSheet = new ArrayList<List<String>>();

            if(xssfSheet == null){

                continue;

            }

            //读取每一行

            for(int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++){

                //得到行对象

                XSSFRow xssfRow = xssfSheet.getRow(rowNum);

                //rowList存放每一行的数据

                List<String> resultRow = new ArrayList<String>();

                if(xssfRow == null){

                    continue;

                }

                //最小列索引

                int minColIx = xssfRow.getFirstCellNum();

                //最大列索引

                int maxColIx = xssfRow.getLastCellNum();

                //读取每一格

                for(int colIx = minColIx; colIx <= maxColIx; colIx++){

                    //得到格对象

                    XSSFCell cell = xssfRow.getCell(colIx);

                    if(cell == null){

                        //保证结构固定

                        resultRow.add("");

                        continue;

                    }

                    //设置每个表格的类型为String

                    //cell.setCellType(Cell.CELL_TYPE_STRING);

                    //将得到的每一格的值插入到resultRow

                    //resultRow.add(cell.toString());

                    //LIUHONGYU 获取表格里的值

                    result_s = getValue(cell,evaluator);

                    resultRow.add(result_s);

                }

                //将读取到的每一行插入到resultSheet

                resultSheet.add(resultRow);

            }

            //将读取到的每一页插入到result

            result.add(resultSheet);

        }

        return result;

    }

    

   

   /**

    * LIUHONGYU 获取表格中的值

    * @param cell

    * @param evaluator

    * @return

    */

    private static String getValue(XSSFCell cell,
XSSFFormulaEvaluator evaluator) {

    String result = new String();  

         switch (cell.getCellType()) {  

         case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型  

             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 HH:mm");  

                 }  

                 Date date = cell.getDateCellValue();  

                 result = sdf.format(date);  

             } else if (cell.getCellStyle().getDataFormat() == 58) {  

                 // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)  

                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  

                 double value = cell.getNumericCellValue();  

                 Date date = org.apache.poi.ss.usermodel.DateUtil  

                         .getJavaDate(value);  

                 result = sdf.format(date);  

             } else {  

            HSSFDataFormatter dataFormatter = new HSSFDataFormatter();

                 result = dataFormatter.formatCellValue(cell);

             }  

             break;  

         case HSSFCell.CELL_TYPE_FORMULA://LIUHONGYU 2017/6/19

          CellValue cellValue = evaluator.evaluate(cell);

          double cv = cellValue.getNumberValue();

          DecimalFormat df = new DecimalFormat("#.###");

          result=df.format(cv);  

          break;

         case HSSFCell.CELL_TYPE_STRING:// String类型  

             result = cell.getRichStringCellValue().toString();  

             break;  

         case HSSFCell.CELL_TYPE_BLANK:  

             result = "";  

         default:  

             result = "";  

             break;  

         }  

         return result;  

     }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: