java统计分析数据Excel导出

December 17, 2023
测试
测试
测试
测试
7 分钟阅读

1.spring boot中Controller代码

 /**
     * 导出数据
     *
     * @param request
     * @param response
     * @throws IOException
     */
    @PostMapping("/ExportUserInfo")
    public void ExportUserInfo(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //表头数据
        String[] header = {"姓名", "编号", "年龄", "地址"};

        //声明一个工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();

        //生成一个表格,设置表格名称为"学生表"
        HSSFSheet sheet = workbook.createSheet("用户信息");

        //设置表格列宽度为10个字节
        sheet.setDefaultColumnWidth(10);
        //创建标题的显示样式
        HSSFCellStyle headerStyle = workbook.createCellStyle();
        headerStyle.setFillForegroundColor(IndexedColors.YELLOW.index);
        headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

        //创建第一行表头
        HSSFRow headrow = sheet.createRow(0);

        //遍历添加表头(下面模拟遍历学生,也是同样的操作过程)
        for (int i = 0; i < header.length; i++) {
            //创建一个单元格
            HSSFCell cell = headrow.createCell(i);
            //创建一个内容对象
            HSSFRichTextString text = new HSSFRichTextString(header[i]);

            //将内容对象的文字内容写入到单元格中
            cell.setCellValue(text);
            cell.setCellStyle(headerStyle);
        }

        //获取导出的数据
        SysUserPageInvo invo = new SysUserPageInvo();
        List<SysUserOut> list = this.sysUserService.getUserList(invo);

    // 设置样式
        HSSFCellStyle bodyStyle = workbook.createCellStyle();
        bodyStyle.setBorderTop(BorderStyle.THIN);
        bodyStyle.setBorderBottom(BorderStyle.THIN);
        bodyStyle.setBorderLeft(BorderStyle.THIN);
        bodyStyle.setBorderRight(BorderStyle.THIN);
    
        for (int i = 0; i < list.size(); i++) {
            //创建一行
            HSSFRow row1 = sheet.createRow(i + 1);
            //姓名
            Cell cell0 = row1.createCell(0);
            cell0.setCellStyle(bodyStyle);
            cell0.setCellValue(new HSSFRichTextString(list.get(i).getUserName()));
            //编号
            Cell cell3 = row1.createCell(1);
            cell3.setCellStyle(bodyStyle);
            cell3.setCellValue(new HSSFRichTextString(list.get(i).getTeamType().toString()));
            //年龄
            Cell cell4 = row1.createCell(2);
            cell4.setCellStyle(bodyStyle);
            cell4.setCellValue(new HSSFRichTextString(list.get(i).getAccountNumbers().toString()));
            //地址
            Cell cell6 = row1.createCell(3);
            cell6.setCellStyle(bodyStyle);
            cell6.setCellValue(new HSSFRichTextString(list.get(i).getWelfarelables()));


        }

        //准备将Excel的输出流通过response输出到页面下载
        //八进制输出流
        response.setContentType("application/octet-stream;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");//设置返回数据编码
        //这后面可以设置导出Excel的名称,此例中名为student.xls
        response.setHeader("Content-disposition", "attachment;filename=用户信息.xls");

        //刷新缓冲
        response.flushBuffer();

        //workbook将Excel写入到response的输出流中,供页面下载
        workbook.write(response.getOutputStream());
    }

2. element ui前台调用

   ExportUserInfo() {
        this.$axios({
          method: 'POST',
          url: this.url.ExportUserInfo,
          responseType: 'blob'
        }).then(response => {
          if (!response) {
            return
          }
          const blob = new Blob([response.data])
          if (window.navigator && window.navigator.msSaveOrOpenBlob) {
            navigator.msSaveBlob(blob, '用户信息.xls')
          } else {
            let u = window.URL.createObjectURL(response.data)
            let aLink = document.createElement('a')
            aLink.style.display = 'none'
            aLink.href = u
            aLink.setAttribute('download', '用户信息.xls')
            document.body.appendChild(aLink)
            aLink.click()
            document.body.removeChild(aLink)
            window.URL.revokeObjectURL(u)
          }
        }).catch(error => {
          throw error
        })
      },

          java使用poi导出excel只要把数据组织好,按照固定的格式输出就可以,需要注意的是导出的格式如果是不是中规中矩的格式(第一行标题,第二行以下是数据)的话,需要用模版或者根据单元格位置固定导出,大家可以把这个方法抽成一个共同的方法方便以后开发项目的时候继续使用。后续我会分享更多的技术相关的内容,请大家多多关注。

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多