java实现excel的导入和导出

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

1,需要的依赖

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.14</version>
</dependency>

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

2,excel导入

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

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

         /**
          * 通常第一行都是标题,所以从第二行开始读取数据
          */
         for(int i=1; i<sheet.getLastRowNum()+1; 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<DeviceActivePeriod> list=dService.monActiveDevices(30,user.getId(),prodId);
        List<StatisticsModel> 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;i<datasList.size();i++){
           StatisticsModel statisticsModel=datasList.get(i);
           //从第二行开始填充数据
           row = sheet.createRow(i+1);
           //该集合只记录数量和时间,这两个值来自statisticsModel。如果对象比较复杂,需要额外转换,比如Date类型的日期,int,float类型的数值
           List<String> datas=new ArrayList<>();

           String count=statisticsModel.getValue1().toString();
           String time=statisticsModel.getTime();
           datas.add(count);
           datas.add(time);
           for (int j=0;j<datas.size();j++) {
               String string=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导入导出通常使用Apache POI库,它是一个开源的API,用于处理Microsoft Office格式的文件,包括Excel (.xls .xlsx)。以下是简单的步骤: **导入Excel (读取数据)**: 1. 添加依赖:在Maven项目中添加`<dependency>`到pom.xml文件中: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.0.0</version> <!-- 根据最新版本替换 --> </dependency> ``` 2. 使用`XSSFWorkbook`或`XLSXSSFWorkbook`打开Excel文件,例如: ```java FileInputStream fis = new FileInputStream("path_to_your_file.xlsx"); Workbook workbook = new XSSFWorkbook(fis); Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 Iterator<Row> rowIterator = sheet.iterator(); ``` 3. 遍历行单元格获取数据: ```java while (rowIterator.hasNext()) { Row row = rowIterator.next(); for (Cell cell : row) { switch (cell.getCellType()) { case STRING: System.out.print(cell.getStringCellValue() + "\t"); break; // 处理其他数据类型... } } } ``` **导出Excel (写入数据)**: 1. 创建一个新的Workbook对象,并指定是否为xlsx格式。 2. 添加新的Sheet并设置列标题。 3. 写入数据: ```java Row headerRow = sheet.createRow(0); Cell cell = headerRow.createCell(0); cell.setCellValue("Header1"); // ... for (int i = 0; i < data.size(); i++) { Row newRow = sheet.createRow(i+1); List<String> rowData = data.get(i); for (int j = 0; j < rowData.size(); j++) { cell = newRow.createCell(j); cell.setCellValue(rowData.get(j)); } } FileOutputStream outputStream = new FileOutputStream("output.xlsx"); workbook.write(outputStream); workbook.close(); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值