栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现excel导入导出

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现excel导入导出

java实现excel导入导出
  • 我遇到的问题
    • 解决思路
    • 代码实现(参照网上的方法,自己选了两种)
      • 导出(把实体类和方法名换一下直接复制可用)
      • 导入(直接复制可用)

我遇到的问题

使用easypoi/eayexcel写项目时出现导入正常使用导出不能用
修改依赖后导出正常使用导入不能用

解决思路

1.依赖只要必要的两个:

        
            com.alibaba
            fastjson
            1.2.51
        
        
            org.apache.poi
            poi-ooxml
            3.17
        

2.最重要的一点,导出的接口返回void才不会报错!!!

代码实现(参照网上的方法,自己选了两种) 导出(把实体类和方法名换一下直接复制可用)

在swagger测试导出表名会乱码,可以直接在浏览器访问地址会发现此时是不会乱码的,不会影响功能

//导出接口
public void getddfClewExcel(HttpServletResponse response, AdminDdfClewVo clewExcel) throws IOException {
        try{
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            String Excelname="这里设置一个统一的表名,也可以使用实体类的某一列做表名";

            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(Excelname,"UTF-8") + ".xlsx");
            // excel头策略
            WriteCellStyle headWriteCellStyle = new WriteCellStyle();
            WriteFont headWriteFont = new WriteFont();
            headWriteFont.setFontHeightInPoints((short) 11);
            headWriteFont.setBold(false);
            headWriteCellStyle.setWriteFont(headWriteFont);
            // excel内容策略
            WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
            WriteFont contentWriteFont = new WriteFont();
            contentWriteFont.setFontHeightInPoints((short) 11);
            contentWriteCellStyle.setWriteFont(contentWriteFont);
            // 设置handler
            HorizontalCellStyleStrategy styleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
            
            List ddfClewExcels = ddfClewService.getddfClewExcel(clewExcel.getUid(),clewExcel.getId(),
       		clewExcel.getProjectName(),clewExcel.getStartDate(),clewExcel.getEndDate(),clewExcel.getClewStatus(),clewExcel.getUserName(),
                    clewExcel.getAddress(),clewExcel.getSource());
            EasyExcel.write(response.getOutputStream(), DdfClewExcelVo.class)	//这里的DdfClewExcelVo是显示的表内容,不需要的列就不要加在里面,创建一个这个类,给每个需要显示的字段加上注解 @ExcelProperty(value = "列名",index = 显示在第几列,从0开始为第一列)
                    .sheet("下载excel服务")
                    .registerWriteHandler(styleStrategy)
                    .doWrite(ddfClewExcels);
            log.info("数据导出成功");
            ResultData.success(ddfClewExcels,"数据导出成功");

        }catch (Exception e){
            e.printStackTrace();
            ResultData.fail(ResponseCode.ERROR.val(),"数据导出失败");
        }
导入(直接复制可用)

这是实现类的代码

 @Override
    public ResultData exportExcel(MultipartFile file) throws Exception {

        //读取工作簿
        Workbook workBook = WorkbookFactory.create(file.getInputStream());
        //读取工作表
        Sheet sheet = workBook.getSheetAt(0);
        int rowNumber = sheet.getPhysicalNumberOfRows();
        //校验是否填写内容
        if (rowNumber <= 1) {
            return ResultData.fail(ResponseCode.ERROR.val(), "文件无内容");
        }
        //循环读取每一行数据并校验
        for (int i = 1; i < rowNumber; i++) {
            try {
                //读取行
                Row row = sheet.getRow(i);
                //读取单元格,这是实体类,把列中的数据set进去就好了
                Advised advised = new Advised();

				//获取第二列数据,与实体类中的字段对应
                row.getCell(1).setCellType(Cell.CELL_TYPE_STRING);
                advised.setCallnumber(row.getCell(1).getStringCellValue());//

				//获取第六列数据,与实体类中的字段对应
                row.getCell(5).setCellType(Cell.CELL_TYPE_STRING);
                advised.setAddress(row.getCell(5).getStringCellValue());//

              	//以此类推,不要的列就不set
				//==============
                

				//调用写好的新增方法,把获取指定的列数据插入到数据库
                advisedMapper.addAdvised(advised);

            } catch (Exception e) {
                e.printStackTrace();
                return ResultData.fail(ResponseCode.ERROR.val(), "数据导入失败");
            }
        }
        return ResultData.success(ResponseCode.SUCCESS,"数据导入成功");
    }

这是控制器接口写法

    @PostMapping(value="/exportAdvisedExcel",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResultData exportExcel(@RequestParam MultipartFile file)throws Exception{
        return  advisedService.exportExcel(file);
    }

参照这两段 就能实现导入导出功能了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424082.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号