Excel导出文件流下载

Controller.cs

@CrossOrigin(allowCredentials="true", allowedHeaders="*", methods={RequestMethod.GET,
            RequestMethod.POST, RequestMethod.DELETE, RequestMethod.OPTIONS,
            RequestMethod.HEAD, RequestMethod.PUT, RequestMethod.PATCH}, origins="*")
    @RequestMapping("/ot")
    @ResponseBody
    public void ot(String key, HttpServletResponse response) {
        try {
            String storeName = key+".xlsx";
            XSSFWorkbook workBook = excelService.outputExcel(key);
            ByteArrayOutputStream bt = new ByteArrayOutputStream();
            workBook.write(bt);
            workBook.close();
            bt.flush();
            ByteArrayInputStream bis = new ByteArrayInputStream(bt.toByteArray());
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setHeader("Content-disposition", "attachment; filename="
                + new String(storeName.getBytes("utf-8"), "ISO8859-1"));
            //设置输出长度
            response.setHeader("Content-Length", String.valueOf(bt.size()));
            BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
            byte[] buff = new byte[2048];
            int bytesRead;
            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
              bos.write(buff, 0, bytesRead);
            }
            //关闭流
            bis.close();
            bos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Service.cs

public XSSFWorkbook outputExcel(String key){
        String json = "{status:‘OK‘, msg: ‘导出完毕!‘}";

        String schame = key.split("\\.")[0];
        String tablename = key.split("\\.")[1];
        XSSFWorkbook workBook = new XSSFWorkbook();
        XSSFSheet sheet = workBook.createSheet();
        workBook.setSheetName(0,"Sheet1");
        XSSFRow titleRow = sheet.createRow(0);
        titleRow.createCell(0).setCellValue(tablename);
        Jedis jedis = new Jedis("10.8.4.94");
        List<String> tables = new ArrayList<String>();
        jedis.select(2);
        try {
            tables = jedis.lrange("db_tables", 0, -1);
        } catch (Exception e) {
            // TODO: handle exception
        }finally{
            jedis.close();
        }

        for(String s:tables){
            JSONObject obj = JSON.parseObject(s);
            if(obj.getString("owner").equals(schame) && obj.getString("table_name").equals(tablename)){
                titleRow.createCell(1).setCellValue(obj.getString("comment"));
            }
        }

        XSSFRow secondRow = sheet.createRow(1);
        secondRow.createCell(0).setCellValue("字段英文名");
        secondRow.createCell(1).setCellValue("字段类型");
        secondRow.createCell(2).setCellValue("注释");
        secondRow.createCell(3).setCellValue("是否主键");
        secondRow.createCell(4).setCellValue("是否非空");
        secondRow.createCell(5).setCellValue("默认值");

        jedis = new Jedis("10.8.4.94");
        List<String> columns = new ArrayList<String>();
        jedis.select(2);
        try {
            columns = jedis.lrange(key, 0, -1);
        } catch (Exception e) {
            // TODO: handle exception
        }finally{
            jedis.close();
        }

        int k = 2;
        for(String s: columns){
            JSONObject obj = JSON.parseObject(s);
            XSSFRow row = sheet.createRow(k);
            row.createCell(0).setCellValue(obj.getString("column_name"));
            row.createCell(1).setCellValue(obj.getString("data_type").equals("VARCHAR2")?(obj.getString("data_type")+"("+obj.getString("data_length")+")"):obj.getString("data_type"));
            row.createCell(2).setCellValue(obj.getString("comment"));
            row.createCell(3).setCellValue(obj.getString("pk"));
            row.createCell(4).setCellValue(obj.getString("nullable"));
            row.createCell(5).setCellValue(obj.getString("data_default"));
            k++;
        }

        return workBook;
    }

原文地址:https://www.cnblogs.com/wpcnblog/p/9158783.html

时间: 2024-11-03 02:47:55

Excel导出文件流下载的相关文章

Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI.这里我们用Apache POI!我们先去Apach

springboot项目实现excel静态模板下载

excel静态模板下载,有两种方式:第一种,在http头中指定输出文件流的类型为"application/vnd.ms-excel"类型时,输出流时就不需要添加输出文件的后缀名:第二种,指定文件流的类型为"multipart/form-data"时,输出流时需要判断文件是.xls/.xlsx,并且加上后缀名. 1.方式一: controller层代码: @GetMapping("/download") public Result<Strin

poi excel导出,下载

poi.jar包 public void downExcel(HttpServletResponse response,Page<ShopApply> page) throws Exception{ // 第一步,创建一个webbook,对应一个Excel文件 HSSFWorkbook wb = new HSSFWorkbook(); // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet HSSFSheet sheet = wb.createSheet(&quo

java导出excel 浏览器直接下载或者或以文件形式导出

1 /** 2 * excel表格直接下载 3 */ 4 public static void exportExcelByDownload(HSSFWorkbook wb,HttpServletResponse httpServletResponse,String fileName) throws Exception { 5 //响应类型为application/octet- stream情况下使用了这个头信息的话,那就意味着不想直接显示内容 6 httpServletResponse.setC

http实时流下载转换成视频

http实时流下载转换视频 请求样式 https://alhlsvodhls02.e.vhall.com/vhallyun/vhallhls/ls/s_/db/lss_db7eb88c/lss_db7eb88c/20191214194456183822/livestream000239.ts 所以我们就是把这些ts二进制下载下来转换成视频格式应该就可以播放了. 试了一下下载一个ts直接在迅雷里可以播放几秒视频的. 参考一下方法可行,但是我没找到批量下载. https://jingyan.baid

poi 架包导出excel,并下载

导出excel在许多系统中都有应用到,这里以两个简单例子作为介绍: 1.导入poi-3.9.jar,可以在官网下载http://poi.apache.org . 2.先写一个简单的测试类,里面有详细的解释,代码如下: 1 import java.io.FileOutputStream; 2 import java.io.IOException; 3 import org.apache.poi.hssf.usermodel.HSSFCell; 4 import org.apache.poi.hss

Java学习之道:Java操作Excel之导出下载

页面放置一个button进行点击导出事件 <h:commandLink target="_parent" value="导出" action="#{eveluatesubject.doSaveExcel}" styleClass="cssButtonBG"> </h:commandLink> 后台的导出方法 /** * 导出EXCEL * * @param request * @return */ pu

.net生成Excel,并下载

生成Excel的方式有很多种,这里记录两个最简单的: 1.将数据保存为html,然后输出到客户端,保存为Excel文件: 2.通过\t\n生成字符串,然后输出到客户端,保存为Excel. 以上两者的原理都是一致的,只是生成的字符串长相不一致而已.我这里使用的是mvc,所以要下载的话,直接生成一个超链接指向当前这个生成文件的Action,用Ajax好像没办法,但是如果当前这个超链接只是请求一个文件,页面也不会刷新,比如一个按钮点击事件:直接windows.location.href="/contr

记一次服务器生成Excel在客户端下载的案例

今天加盟部校长说做一个用户数据收集并导出Excel文件的小网页,主要便于查看客户信息,前期一切顺利,就在生成Excel和下载的时候出现了问题,收集了一些资料,有人说用NPOI插件,这个可行,我在网上收集了资料,没有使用插件做了一个简单的Excel生成器,话不多少代码如下: 首先在服务类中 //导出Excel        /// <summary>        /// DataTable导出到Excel        /// </summary>        /// <p