JAVA导出EXCEL、设置列宽、设置筛选、首行固顶

 

 

导出excel调用的方法

/**
     *
     * @param list  导出的数据集合
     * @param request
     * @param response
     */


    public static void exportExcel(List<Student> list, HttpServletRequest request,
                                   HttpServletResponse response) {
        HSSFWorkbook wb = new HSSFWorkbook();

        Sheet sheet = wb.createSheet("可以设置名称");
        boolean flag = false;
        String headerTitle="编号,用户名";  //表头
        String[] headerTitles=headerTitle.split(",");
        try {
            Row row = sheet.createRow(0);

            for (int i = 0; i < headerTitles.length; i++) {
                Cell cell = row.createCell(i);
                cell.setCellValue(headerTitles[i]);
            }


            for (int i = 0; i < list.size(); i++) {
                Row rowB = sheet.createRow(i + 1);
                Cell cellB1 = rowB.createCell(0);
                cellB1.setCellValue(list.get(i).getId());

                Cell cellB2 = rowB.createCell(1);
                cellB2.setCellValue(list.get(i).getUsername());

            }

            String filename = "文件名" + DateFormatUtils.formatDateTime(new Date()) + ".xls";
            if (wb != null) {
                if (response != null) {
                    response.setContentType("application/vnd.ms-excel;charset=utf-8");
                    response.setHeader("Content-Disposition",
                            "attachment;filename=\"" + new String(filename.getBytes("gb2312"), "ISO8859-1"));  //文件名中文需进行格式转换,不然可能出现乱码
                    OutputStream out = response.getOutputStream();
                    wb.write(out);
                    out.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

 

如果前端使用的是vue,可以需要导出字节方式,将后面换成这种

 if (wb != null) {
     
              response.setCharacterEncoding(StandardCharsets.UTF_8.name());
                response.setContentType("application/x-msdownload");
                // 浏览器弹出窗口显示的文件名
                response.addHeader("Access-Control-Expose-Headers", "Content-disposition");
                response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename,"UTF-8"));

                ByteArrayOutputStream out = new ByteArrayOutputStream();
                wb.write(out);
                response.getOutputStream().write(out.toByteArray());
            }

上面这个文件名用的URLEncoder编码了一下,所以前端需要解码,不过这个可以根据自己实际的来灵活修改,

前端vue参考

let download = res.headers['content-disposition'].slice(res.headers['content-disposition'].search("=") + 1) //下载后文件名
download = decodeURI(link.download);

 

 

 

 

 

设置列宽度   

sheet.SetColumnWidth(0, 100 * 256);

 

第一个参数就是列的索引 从0开始

第二个表示把宽度设置为了100个字符。

 

 

设置筛选 A1:D1是excel筛选区域

CellRangeAddress cellAddresses = CellRangeAddress.valueOf("A1:D1");
        sheet.setAutoFilter(cellAddresses);

 

 

 

设置首行固顶

sheet.createFreezePane( a,b,c,d); 

a表示要冻结的列数;

b表示要冻结的行数;

c表示右边区域[可见]的首列序号;

d表示下边区域[可见]的首行序号;

createFreezePane(0,1,0,1):冻结第一行

 

posted @ 2019-03-13 16:44  yvioo  阅读(1721)  评论(0编辑  收藏  举报