qq_40762697 2023-12-06 10:55 采纳率: 52.6%
浏览 58
已结题

java导出EXCEL这里已经执行成功了,但是流浪器没有下载


ExcelData data = new ExcelData();
            data.setHead(head);
            data.setData(list);
            data.setFileName(nameSPCI);
            ExcelUtil.exportExcel(response, data);

  public static void exportExcel(HttpServletResponse response, ExcelData data) {
        log.info("导出解析开始,fileName:{}",data.getFileName());
        try {
            //实例化HSSFWorkbook
            SXSSFWorkbook workbook = new SXSSFWorkbook();
            //创建一个Excel表单,参数为sheet的名字
            Sheet sheet = workbook.createSheet("sheet");
            //设置表头
            setTitle(workbook, sheet, data.getHead());
            //设置单元格并赋值
            setData(sheet, data.getData());
            //设置浏览器下载
            setBrowser(response, workbook, data.getFileName());
            log.info("导出解析成功!");
        } catch (Exception e) {
            log.info("导出解析失败!");
            e.printStackTrace();
        }
    }

    /**
     * 方法名:setTitle
     * 功能:设置表头
     * 描述:
     * 创建人:typ
     * 创建时间:2018/10/19 10:20
     * 修改人:
     * 修改描述:
     * 修改时间:
     */
    private static void setTitle(SXSSFWorkbook workbook, Sheet sheet, String[] str) {
        try {
            Row row = sheet.createRow(0);
            //设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
            for (int i = 0; i <= str.length; i++) {
                sheet.setColumnWidth(i, 15 * 256);
            }
            //设置为居中加粗,格式化时间格式
            CellStyle style = workbook.createCellStyle();

            style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
            //创建表头名称
            Cell cell;
            for (int j = 0; j < str.length; j++) {
                cell = row.createCell(j);
                cell.setCellValue(str[j]);
            }
        } catch (Exception e) {
            log.info("导出时设置表头失败!");
            e.printStackTrace();
        }
    }

    /**
     * 方法名:setData
     * 功能:表格赋值
     * 描述:
     * 创建人:typ
     * 创建时间:2018/10/19 16:11
     * 修改人:
     * 修改描述:
     * 修改时间:
     */
    private static void setData(Sheet sheet, List<Object[]> data) {
        try{
            int rowNum = 1;
            SXSSFWorkbook book = new SXSSFWorkbook();
            CellStyle styleDate=book.createCellStyle();
            styleDate.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
            Object fieldValue;
            for (int i = 0; i < data.size(); i++) {
                Row row = sheet.createRow(rowNum);
                for (int j = 0; j < data.get(i).length; j++) {
                    Cell cellij = row.createCell(j);
                    fieldValue= data.get(i)[j];
                    if(fieldValue instanceof Integer){
                        cellij.setCellValue((Integer) data.get(i)[j]);
                    }
                    if(fieldValue instanceof Double){
                        cellij.setCellValue((Double) data.get(i)[j]);
                    }
                    if(fieldValue instanceof Date){
                        cellij.setCellStyle(styleDate);
                        cellij.setCellValue((Date) fieldValue);
                    }
                    if(fieldValue instanceof String){
                        cellij.setCellValue((String) data.get(i)[j]);
                    }
                }
                rowNum++;
            }
            log.info("表格赋值成功!");
        }catch (Exception e){
            log.info("表格赋值失败!");
            e.printStackTrace();
        }
    }

    /**
     * 方法名:setBrowser
     * 功能:使用浏览器下载
     * 描述:
     * 创建人:typ
     * 创建时间:2018/10/19 16:20
     * 修改人:
     * 修改描述:
     * 修改时间:
     */
    private static void setBrowser(HttpServletResponse response, SXSSFWorkbook workbook, String fileName) {
        try {
            //清空response
            response.reset();
            //设置response的Header
            response.setHeader("Content-Disposition", "attachment;filename*=utf-8''"+ URLEncoder.encode(fileName,"utf-8"));
            if (!response.isCommitted()) {
                response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error message");
            }
            OutputStream os = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/vnd.ms-excel;charset=gb2312");
            //将excel写入到输出流中
            workbook.write(os);
            workbook.close();
            os.flush();
            os.close();
            log.info("设置浏览器下载成功!");
        } catch (Exception e) {
            log.info("设置浏览器下载失败!");
            e.printStackTrace();
        }

    }


@ResponseBody
    @RequestMapping(value = "/importExcelVocabularySpToos")
    public AjaxResult importExcelVocabularySpToos(@RequestParam("file")  MultipartFile fileName,HttpServletResponse response) throws IOException {
        String name = fileName.getOriginalFilename();
        if (!name.endsWith(".xls") && !name.endsWith(".xlsx")) {
            System.out.println("文件不是excel类型");
        } else {
            Boolean isOk= vocabularySpService.importExcelVocabularySpTool(fileName,response);
            System.out.println("isOk = " + isOk);
            if(isOk){
                return new AjaxResult(0,"成功");
            }
        }
        return new AjaxResult(999,"失败");
    }

 var demoListView = $('#demoList')
            ,uploadListIns = upload.render({
            elem: '#testList'
            ,url: '/importExcelVocabularySpToos' //改成您自己的上传接口
            ,accept: 'file'
            ,multiple: true
            ,auto: false
            ,bindAction: '#testListAction'
            ,choose: function(obj){
                var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
                //读取本地文件
                obj.preview(function(index, file, result){
                    var tr = $(['<tr id="upload-' + index + '">'
                        , '<td>' + file.name + '</td>'
                        , '<td>' + (file.size / 1024).toFixed(1) + 'kb</td>'
                        , '<td>等待上传</td>'
                        , '<td>'
                        , '<button class="layui-btn layui-btn-xs demo-reload layui-hide">重传</button>'
                        , '<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">删除</button>'
                        , '</td>'
                        , '</tr>'].join(''));

                    //单个重传
                    tr.find('.demo-reload').on('click', function(){
                        obj.upload(index, file);
                    });

                    //删除
                    tr.find('.demo-delete').on('click', function(){
                        delete files[index]; //删除对应的文件
                        tr.remove();
                        uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
                    });

                    demoListView.append(tr);
                });

            }
            ,done: function(res, index, upload){

                if(res.code===0){ //上传成功,这里的code为后台响应的code
                    var tr = demoListView.find('tr#upload-'+ index)
                        ,tds = tr.children();
                    tds.eq(2).html('<span style="color: #5FB878;">上传成功</span>');

                    return delete this.files[index]; //删除文件队列已经上传成功的文件
                }
                this.error(index, upload);
            }
            ,error: function(index, upload){
                var tr = demoListView.find('tr#upload-'+ index)
                    ,tds = tr.children();
                tds.eq(2).html('<span style="color: #FF5722;">上传失败</span>');
                tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
            }
        });
    });
  • 写回答

11条回答 默认 最新

  • 叫兽-郭老师 新星创作者: Java技术领域 2023-12-06 12:09
    关注

    你有没有找找自己原因呢,上来就给踩,我给你的答案是我项目中用的,非常好使。至于你为什么用不了,不找找原因?
    导入包:

    import org.apache.commons.io.IOUtils;
    

    代码:

    
    // 设置强制下载不打开
                response.setContentType("application/vnd.ms-excel");
                // 设置文件名
                response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
                response.setCharacterEncoding("UTF-8");
                OutputStream out = response.getOutputStream();
                //输出文件
                InputStream inputStream = new FileInputStream(file);
                IOUtils.copy(inputStream, out);
                //关闭流
                IOUtils.closeQuietly(inputStream);
                IOUtils.closeQuietly(out);
     
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月7日
  • 创建了问题 12月6日