Apache POI 操作Excel文件--写入数据至客户端

发布时间 2023-12-31 16:30:16作者: 梁哲
    public void exprotBusinessData(HttpServletResponse httpServletResponse) {
        // 1. 查询数据库
        LocalDateTime begin=LocalDateTime.of(LocalDate.now().minusDays(30),LocalTime.MIN);
        LocalDateTime end=LocalDateTime.of(LocalDate.now().minusDays(1),LocalTime.MAX);
        BusinessDataVO businessData = workspaceService.getBusinessData(begin, end);
        // 2. 写入excel
        try {
            // 获取模版--从本地
            InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream("template/excel.xlsx");// 通过反射机制获取文件输入流
            XSSFWorkbook excel = new XSSFWorkbook(resourceAsStream); // 从该输入流管道内获取excel文件对象excel -- XSSFWorkbook
// 填充数据
            XSSFSheet sheet1 = excel.getSheet("Sheet1"); // 根据表格页名获取表格页对象sheet1 -- XSSFSheet
            sheet1.getRow(1) // 根据行索引获取行对象row -- XSSFRow
            .getCell(1) //  根据列索引获取单元格对象cell -- XSSFCell
            .setCellValue("时间:"+begin+"至"+end); // 根据单元格对象设置单元格值

            XSSFRow row4=sheet1.getRow(3);
            row4.getCell(2).setCellValue(businessData.getTurnover());
            row4.getCell(4).setCellValue(businessData.getOrderCompletionRate());
            row4.getCell(6).setCellValue(businessData.getNewUsers());

            XSSFRow row5=sheet1.getRow(4);
            row5.getCell(2).setCellValue(businessData.getValidOrderCount());
            row5.getCell(4).setCellValue(businessData.getUnitPrice());

            // 3. 将文件下载给客户端浏览器
            ServletOutputStream outputStream=httpServletResponse.getOutputStream(); // 获取接通客户端的数据输出流通道
            excel.write(outputStream); // 将excel文件内容写入该通道 --> 传输到客户端
        } catch (Exception e) {
            e.printStackTrace();
        }