java实现excel的导入和导出

在网上参考了很多文章,对于excel的导入导出大概看了下,详细的API没有仔细去看,只不过是实现了功能而已。这里贴上代码,一方面自己以后用得时候可以直接拿来用,另一方面有需要实现excel导入导出功能的,也可以大概看看本篇文章。

1,需要的依赖

<dependency>
            <groupId>org.apache.poigroupId>
            <artifactId>poiartifactId>
            <version>3.14version>
dependency>

POI所需要的依赖,基本都包括了。

2,excel导入

这部分实现起来比较简单。上传一个excel文件,最后生成一个List集合。当然前提是excel每列的内容还有数据格式是需要提前定义好的。

    /**
     * 通过导入excel文件,读出每个单元格的内容。
     * InputStream来自于文件上传时的MultipartFile对象
     */
    @Override
    public List readXls(InputStream is,Integer userId,Integer prodId) throws IOException,
            InvalidFormatException {
         List shipments=new ArrayList();
         HSSFWorkbook book = new HSSFWorkbook(is);
         HSSFSheet sheet = book.getSheetAt(0);

         /**
          * 通常第一行都是标题,所以从第二行开始读取数据
          */
         for(int i=1; i1; i++) {
                HSSFRow row = sheet.getRow(i);
                row.getCell(0).setCellType(Cell.CELL_TYPE_STRING);
                row.getCell(1).setCellType(Cell.CELL_TYPE_STRING);
                row.getCell(2).setCellType(Cell.CELL_TYPE_STRING);
                String uuid = row.getCell(0).getStringCellValue(); //名称
                String dealerName = row.getCell(1).getStringCellValue(); //url
                String prodName = row.getCell(2).getStringCellValue();
                Shipment shipment=new Shipment();
                shipment.setUuid(uuid);
                shipment.setDealerName(dealerName);
                shipment.setProdName(prodName);
                shipment.setUserId(userId);
                shipment.setProdId(prodId);
                shipment.setCreated(new Date());
                shipment.setUpdated(new Date());


                shipments.add(shipment);
            }

        for (Shipment shipment : shipments) {
            System.err.println(shipment);
        }

        return shipments;

    }

3,excel导出

excel的导出是以下载的方式进行的。用户点击链接,弹出下载该excel的下载框,用户可以选择将该文件下载到指定位置。

    @RequestMapping("/{prodId}/downloadExcel")
    public void setUpExcel(HttpServletRequest request, HttpServletResponse response,@PathVariable Integer prodId) throws IOException{
        String[] headers = { "数量", "时间"};
        SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal();
        List list=dService.monActiveDevices(30,user.getId(),prodId);
        List datasList=dService.getActiveDevs(list);
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet();
        //设置列宽
        sheet.setDefaultColumnWidth((short) 18);
        //创建第一行的对象,第一行一般用于填充标题内容。从第二行开始一般是数据
        HSSFRow row = sheet.createRow(0);
        for (short i = 0; i < headers.length; i++) {
            //创建单元格,每行多少数据就创建多少个单元格
            HSSFCell cell = row.createCell(i);
            HSSFRichTextString text = new HSSFRichTextString(headers[i]);
            //给单元格设置内容
            cell.setCellValue(text);
        }

        //遍历集合,将每个集合元素对象的每个值填充到单元格中
       for(int i=0;iget(i);
           //从第二行开始填充数据
           row = sheet.createRow(i+1);
           //该集合只记录数量和时间,这两个值来自statisticsModel。如果对象比较复杂,需要额外转换,比如Date类型的日期,int,float类型的数值
           List datas=new ArrayList<>();

           String count=statisticsModel.getValue1().toString();
           String time=statisticsModel.getTime();
           datas.add(count);
           datas.add(time);
           for (int j=0;jstring=datas.get(j);
               HSSFCell cell = row.createCell(j);
               HSSFRichTextString richString = new HSSFRichTextString(string);
               HSSFFont font3 = workbook.createFont();
               //定义Excel数据颜色,这里设置为蓝色
               font3.setColor(HSSFColor.BLUE.index);
               richString.applyFont(font3);
               cell.setCellValue(richString);
        }

       }

       response.setContentType("application/octet-stream");
       response.setHeader("Content-disposition", "attachment;filename="+"Devices.xls");//Excel文件名
       try {
            response.flushBuffer();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       //将workbook中的内容写入输出流中
       workbook.write(response.getOutputStream());

    }

3.1 效果:

java实现excel的导入和导出_第1张图片

你可能感兴趣的:(javaweb)