maven poi Excel操作

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;

}   

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通常业务需求都是客户端一个导出按钮,发送请求到服务端,服务端写一个接口导出报表到客户端,客户可以自行下载。无论Struts或者springMVC均可。 @RequestMapping("Export") @ResponseBody public String getAll(HttpServletRequest request,HttpServletResponse response) throws IOException{ //集合为需要导出数据,数据查询得到,这里测试就不写了。 List<User> list=new ArrayList<User>(); // 生成Excel文件 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); HSSFSheet sheet = hssfWorkbook.createSheet("测试数据"); // 表头 HSSFRow headRow = sheet.createRow(0); headRow.createCell(0).setCellValue("姓名"); headRow.createCell(1).setCellValue("手机号码"); headRow.createCell(2).setCellValue("年龄"); // 表格数据 for (User user : list) { HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); dataRow.createCell(0).setCellValue(user.getName()); dataRow.createCell(1).setCellValue(user.getPhone()); dataRow.createCell(2).setCellValue(user.getAge()); } // 下载导出(一个流两个头) // 设置头信息 response.setContentType( "application/vnd.ms-excel"); // MIME .jpg .xls .mp3 .avi .txt .exe String filename = "驾驶员数据.xls"; //如果为Struts框架,获得request和response可用ServletActionContext String agent = request .getHeader("user-agent"); filename = FileUtils.encodeDownloadFilename(filename, agent); response.setHeader("Content-Disposition", "attachment;filename=" + filename); ServletOutputStream outputStream = response .getOutputStream(); //输出 hssfWorkbook.write(outputStream); // 关闭 hssfWorkbook.close(); //System.out.println("导出成功"); return "success"; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值