SpringBoot导出export

导入依赖(poi实现excel导入导出)


        <!--poi实现excel导入导出-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.15</version>
        </dependency>

Controller层

	@ResponseBody
    @RequestMapping("/export")
    public Result goodsExcel(@RequestBody Order order, HttpServletResponse response) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");//设置日期格式
        XSSFWorkbook wb = null;
        String fileName ="";
            wb = goodsService.show();
            fileName = df.format(new Date())+".xlsx";//我这里设置的名字是由	  			     时间格式命名呢

		<!--这里开始  这是跟下面三行代码一块的 如果生成之后直接下载就把上传的代码注释打开这个和下面三行代码就可以-->
        OutputStream outputStream = null;
        try {
            //本地测试打开,线上发布注释
            fileName = URLEncoder.encode(fileName, "UTF-8");
            //设置ContentType请求信息格式
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName);
            outputStream = response.getOutputStream();
            ByteArrayOutputStream os = new ByteArrayOutputStream();
			<!--这里结束-->

			<!--这里开始  生成之后需要上传到服务器-->
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            wb.write(os);
            byte[] b = os.toByteArray();
            ByteArrayInputStream in = new ByteArrayInputStream(b);
            String  strBase64 = fileUtils.ioToBase64(in);
            MultipartFile file = fileUtils.base64ToMultipart(strBase64);
            boolean upload = fileUtils.upload(file,localPath, fileName);
            if(upload){
                return Result.success("你的地址加上生成的名字就就可以访问到你生成的export"+fileName,"上传成功");
            }else{
                return Result.ERROR("文件上传失败");
            }
            <!--这里结束-->

//            wb.write(outputStream);//下面这三行代码,如果不需要生成之后上传到服务器,就把下面这三行打开
//            outputStream.flush();
//            outputStream.close();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Result.Exception();
    }

Service层

XSSFWorkbook show();
ServiceImpl层
    @Override
    public XSSFWorkbook show() {
        List<EndReport> list = goodsMapper.selectByExample();//查出数据库数据
        XSSFWorkbook wb = new XSSFWorkbook();
        Sheet sheet = wb.createSheet("EndReport");//创建一张表
        Row titleRow = sheet.createRow(0);//创建第一行,起始为0
        titleRow.createCell(0).setCellValue("起止日期");//第一列
        titleRow.createCell(1).setCellValue("截止日期");
        titleRow.createCell(2).setCellValue("员工");
        titleRow.createCell(3).setCellValue("实收金额");
        titleRow.createCell(4).setCellValue("应收金额");
        titleRow.createCell(5).setCellValue("交易笔数");
        titleRow.createCell(6).setCellValue("交易升数");
        titleRow.createCell(7).setCellValue("优惠金额");
        titleRow.createCell(8).setCellValue("挂牌价总价");
        int cell = 1;
        for (EndReport endReport : list) {
            Row row = sheet.createRow(cell);//从第二行开始保存数据
            row.createCell(0).setCellValue(endReport.getStart_time());
            row.createCell(1).setCellValue(endReport.getEnd_time());//将数据库的数据遍历出来
            row.createCell(2).setCellValue(endReport.getEmployee());
            row.createCell(3).setCellValue(endReport.getActual_amount());
            row.createCell(4).setCellValue(endReport.getAmount_receivable());//将数据库的数据遍历出来
            row.createCell(5).setCellValue(endReport.getJy_count());
            row.createCell(6).setCellValue(endReport.getJy_liter());
            row.createCell(7).setCellValue(endReport.getDiscount_amount());//将数据库的数据遍历出来
            row.createCell(8).setCellValue(endReport.getPrice_sum());
            cell++;
        }
        return wb;
    }
FileUtils上传工具类
@Component
public class FileUtils {
    /**
     * @param file     文件
     * @param path     文件存放路径
     * @param fileName 保存的文件名
     * @return
     */
    public static boolean upload(MultipartFile file, String path, String fileName) {

        //确定上传的文件名
        String realPath = path  + fileName;
        System.out.println("上传文件:" + realPath);

        File dest = new File(realPath);

        //判断文件父目录是否存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdir();
        }

        try {
            //保存文件
            file.transferTo(dest);
            return true;
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }

    }

    public String ioToBase64(InputStream in) throws IOException {
        String strBase64 = null;
        try{
            //in.available()//返回文件的字节长度
            byte[] bytes = new byte[in.available()];
            in.read(bytes);
            // 将文件中的内容读入到数组中
            strBase64 = new BASE64Encoder().encode(bytes);   //将字节流数组转换为字符串
            in.close();
        }catch (IOException e) {
            e.printStackTrace();
        }
        return strBase64;
    }


    public MultipartFile base64ToMultipart(String base64) {
        try {
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] b = decoder.decodeBuffer(base64);
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            return new BASE64DecodedMultipartFile(b, base64);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值