使用Java将表格数据导出成Excel格式


前言:本文使用后台处理的办法导出前端表格中显示的数据。

引入依赖

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

书写PoiUtils

public class PoiUtils {

    public  static ResponseEntity<byte[]> exportExcel(List<Market> marketList) throws IOException {
        HttpHeaders headers=null;
        //创建文档
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建excel文档
        HSSFSheet sheet = workbook.createSheet("市场表");
  
        //定义列的宽度
        sheet.setColumnWidth(0, 5 * 256);
        sheet.setColumnWidth(1, 10 * 256);
        sheet.setColumnWidth(2, 10 * 256);
        sheet.setColumnWidth(3, 10 * 256);
        sheet.setColumnWidth(4, 10 * 256);
        //设置表头
        HSSFRow headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("编号");
        headerRow.createCell(1).setCellValue("主题");
        headerRow.createCell(2).setCellValue("预算");
        headerRow.createCell(3).setCellValue("线索");

        for (int i=0;i<marketList.size();i++){
            HSSFRow row = sheet.createRow(i+1);
            Market market = marketList.get(i);
            row.createCell(0).setCellValue(market.getId());
            row.createCell(1).setCellValue(market.getTheme());
            row.createCell(2).setCellValue(market.getbudget());
            row.createCell(3).setCellValue(market.getClue());
        }


        //将excel写入到ByteArrayOutStream中
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        workbook.write(bos);
        headers=new HttpHeaders();
        headers.setContentDispositionFormData("attachment",
                new String("员工表.xls".getBytes("utf-8"),"iso-8859-1"));
        //创建ResponseEntity实体并返回
        return new ResponseEntity<byte[]>(bos.toByteArray(), headers, HttpStatus.CREATED);

    }
}

显示效果

到浏览器中测试:localhost:80/exportExcel(这是我测试的url,你们的自己根据实际情况来使用)

问题:这个请求只能在浏览器中使用,但在实际的项目中使用是时候该如何使用呢?

有朋友就会说这个很简单呀,直接使用ajax请求该路径不久完事了吗?哈哈哈,此时高手就会想到,ajax请求返回的是json,不是文件流,所以不能使用ajax来进行请求。

这个时候我们可以使用原始表单来解决,具体实现方法如下:

<a href="javascript:void(0)" onclick="exportExcel()">导出1</a>

// 导出,使用这种方式 可以,使用 ajax请求不可以 导出excel
function exportExcel(){
     var form = $("<form>");
     form.attr('style', 'display:none');
     form.attr('target', '');
     form.attr('method', 'post');
     form.attr('action', '${pageContext.request.contextPath}/user/export');

     var input1 = $('<input>');
     input1.attr('type', 'hidden');
     input1.attr('name', 'item');
     input1.attr('value', 'test');      /* JSON.stringify($.serializeObject($('#searchForm'))) */

     $('body').append(form);
     form.append(input1);
     
     form.submit();
     form.remove();    
}

标记处改成自己项目的请求地址即可!参考博客:https://www.cnblogs.com/xbq8080/p/7344258.html

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM