java导出excel,返回前端文件流

1,读取数据库,放到Excel中,返回byte数组 

import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.poi.ss.usermodel.Workbook;
import org.jeecgframework.poi.excel.ExcelExportUtil;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.springframework.stereotype.Component;

   public byte[] export(Log log, String startTime, String endTime) {
        ExportParams exportParams = new ExportParams(null, null, ExcelType.XSSF);
        Workbook workbook = null;
        //最大100条数据,日志太多,导致超时,而且数据没有什么意义,当然要根据需求来,数据量大可以用队列异步导出,在线等就用多线程导出
       List logList = logService.getPageList(new Page<>(0, 100), log, startTime, endTime).getRecords();
            workbook = ExcelExportUtil.exportBigExcel(exportParams, Log.class, logList);
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            if (workbook != null) {
                workbook.write(out);
            }
            return out.toByteArray();
        } catch (IOException e) {
            throw new RuntimeException("文件下载失败", e);
        }
    }
2,把读取文件流,放到response中
import org.apache.commons.io.IOUtils;

public void outExcelFile(HttpServletResponse response, String fileName, byte[] data) {
    try {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("Content-Disposition",
                "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO-8859-1"));
        ServletOutputStream outputStream = response.getOutputStream();
        IOUtils.write(data, outputStream);
    } catch (Exception e) {
        throw new RuntimeException("下载文件失败");
    }

}

你可能感兴趣的:(java工具包,java)