maven poi Excel操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_33704704/article/details/86534414

Pom.xml文件

<!-- poi操作excel -->

        <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>

Excel Util

package com.xxx.util;

 

import java.io.IOException; 

import java.io.InputStream; 

import java.text.DecimalFormat; 

import java.text.SimpleDateFormat; 

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import org.apache.poi.hssf.usermodel.HSSFWorkbook; 

import org.apache.poi.ss.usermodel.Cell; 

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.XSSFWorkbook; 

 

 

public class ImportExcelUtil { 

     

    private final static String excel2003L =".xls";    //2003- 版本的excel 

    private final static String excel2007U =".xlsx";   //2007+ 版本的excel 

     

    /**

     * 描述:获取IO流中的数据,组装成List<List<Object>>对象

     * @param in,fileName

     * @return

     * @throws IOException 

     */ 

    /*public  List<List<Object>> getBankListByExcel(InputStream in,String fileName) throws Exception{ 

        List<List<Object>> list = null; 

         

        //创建Excel工作薄 

        Workbook work = this.getWorkbook(in,fileName); 

        if(null == work){ 

            throw new Exception("创建Excel工作薄为空!"); 

        } 

        Sheet sheet = null; 

        Row row = null; 

        Cell cell = null; 

         

        list = new ArrayList<List<Object>>(); 

        //遍历Excel中所有的sheet 

        for (int i = 0; i < work.getNumberOfSheets(); i++) { 

            sheet = work.getSheetAt(i); 

            if(sheet==null){continue;} 

             

            //遍历当前sheet中的所有行 

            for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) { 

                row = sheet.getRow(j); 

                if(row==null||row.getFirstCellNum()==j){continue;} 

                

                //遍历所有的列 

                List<Object> li = new ArrayList<Object>(); 

                for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) { 

                    cell = row.getCell(y);

                      

                    if(this.getCellValue(cell)=="") {

                           li.add(this.getCellValue( sheet.getRow(j-1).getCell(y))); 

                    }else {

                           li.add(this.getCellValue(cell));

                    }

                } 

                list.add(li); 

            } 

        } 

        return list; 

    }  */

   

    /**

     * 读取excel文件

     *

     * @param in

     * @param

     * @return

     * @throws Exception

     */

    public List<Map<String,String>> getBankListByExcel(InputStream in, String fileName) throws Exception {

 

        List<Map<String,String>> lineDownOrders = new ArrayList<>();

        //创建Excel工作薄

        Workbook work = this.getWorkbook(in, fileName);

        if (null == work) {

            throw new Exception("创建Excel工作薄为空!");

        }

        Sheet sheet = null;

        Row row = null;

        Cell cell = null;

 

        //遍历Excel中所有的sheet

        for (int i = 0; i < work.getNumberOfSheets(); i++) {

            sheet = work.getSheetAt(i);

            if (sheet == null) {

                continue;

            }

            //System.out.println(sheet.getSheetName());

            //遍历当前sheet中的所有行

            for (int j =1; j <= sheet.getLastRowNum(); j++) {

                row = sheet.getRow(j);

                if (row == null ) {

                    continue;

                }

 

 

                Map<String,String> map = new HashMap<>();

 

                //把每个单元格的值付给对象的对应属性

                if (row.getCell(0)!=null){

                    map.put("0", String.valueOf(getCellValue(row.getCell(0))));

                    if(String.valueOf(getCellValue(row.getCell(0)))=="") {

                            map.put("0", String.valueOf(getCellValue(sheet.getRow(j-1).getCell(0))));

                    }

                }

               

                if (row.getCell(1)!=null){

                        map.put("1", String.valueOf(getCellValue(row.getCell(1))));

                }

                if (row.getCell(2)!=null){

                        map.put("2", String.valueOf(getCellValue(row.getCell(2))));

                }

                if (row.getCell(3)!=null){

                        map.put("3", String.valueOf(getCellValue(row.getCell(3))));

                }

                if (row.getCell(4)!=null){

                       map.put("4", String.valueOf(getCellValue(row.getCell(4))));

                }

                if (row.getCell(5)!=null){

                       map.put("5", String.valueOf(getCellValue(row.getCell(5))));

                }

                map.put("6", String.valueOf(j));

                map.put("7", String.valueOf(i));

 

                //遍历所有的列(把每一行的内容存放到对象中)

                lineDownOrders.add(map);

            }

        }

 

        return lineDownOrders;

    }

     

    /**

     * 描述:根据文件后缀,自适应上传文件的版本 

     * @param inStr,fileName

     * @return

     * @throws Exception

     */ 

    public  Workbook getWorkbook(InputStream inStr,String fileName) throws Exception{ 

        Workbook wb = null; 

        String fileType = fileName.substring(fileName.lastIndexOf(".")); 

        if(excel2003L.equals(fileType)){ 

            wb = new HSSFWorkbook(inStr);  //2003- 

        }else if(excel2007U.equals(fileType)){ 

            wb = new XSSFWorkbook(inStr);  //2007+ 

        }else{ 

            throw new Exception("解析的文件格式有误!"); 

        } 

        return wb; 

    } 

 

    /**

     * 描述:对表格中数值进行格式化

     * @param cell

     * @return

     */ 

    public  Object getCellValue(Cell cell){ 

        Object value = null; 

        DecimalFormat df = new DecimalFormat("0");  //格式化number String字符 

        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");  //日期格式化 

        DecimalFormat df2 = new DecimalFormat("0.00");  //格式化数字 

         

        switch (cell.getCellType()) { 

        case Cell.CELL_TYPE_STRING: 

            value = cell.getRichStringCellValue().getString(); 

            break; 

        case Cell.CELL_TYPE_NUMERIC: 

            if("General".equals(cell.getCellStyle().getDataFormatString())){ 

                value = df.format(cell.getNumericCellValue()); 

            }else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())){ 

                value = sdf.format(cell.getDateCellValue()); 

            }else{ 

                value = df2.format(cell.getNumericCellValue()); 

            } 

            break; 

        case Cell.CELL_TYPE_BOOLEAN: 

            value = cell.getBooleanCellValue(); 

            break; 

        case Cell.CELL_TYPE_BLANK: 

            value = ""; 

            break; 

        default: 

            break; 

        } 

        return value; 

    } 

Java文件

    @RequestMapping(value="createExcelFile.do")

    @ResponseBody

    public String createNetMgmtFile(@RequestParam(value = "file", required = false) MultipartFile file,HttpServletRequest request) throws Exception{

           String fileName = file.getOriginalFilename();

           InputStream in = file.getInputStream();

           List<Map<String,String>> lineDownOrders = new ImportExcelUtil().getBankListByExcel(in,fileName);

           xxxService.saveExcelInfo(lineDownOrders);

           return null;

}   

猜你喜欢

转载自blog.csdn.net/sinat_33704704/article/details/86534414