zoukankan      html  css  js  c++  java
  • java中自定义excel模板并且填充内容

    场景

    读取某一份固定的excel模板,根据数据填充进入指定的位置

    本地测试时,在本地resources下创建一个存放模板的位置

    例:

    实现

    挺简单的就直接贴代码吧,不得不吐槽一下博客园的编辑器真的很难用..

    @Override
        public void exportDeposit(UserInfo userInfo, Long id, HttpServletRequest request, HttpServletResponse response) throws Exception {
            /*
           业务内容
         */
    
            // excel模板路径(分别是本地测试路径和云上服务器路径)
            String file = this.getClass().getClassLoader().getResource("excel/zhck.xls").getFile();
           // String file = "/usr/local/wms_trade/zhck.xls";
            File fi = new File(file);
            POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fi));
            // 读取excel模板
            HSSFWorkbook wb = new HSSFWorkbook(fs);
            // 读取了模板内所有sheet内容
            HSSFSheet sheet = wb.getSheetAt(0);
            sheet.setForceFormulaRecalculation(true);
            // 在相应的单元格进行赋值
            // 第11行 第6列,这是部分业务内容,其实和本文关系不大,但是可以用来给需要的人参考,内容是如何填入的,不过我更加建议去参考原生api
            sheet.getRow(3).getCell(3).setCellValue(deposit.getType());
            if (deposit.getGmtDeposit() != null) {
                sheet.getRow(3).getCell(1).setCellValue(deposit.getGmtDeposit().toString());
            }
            sheet.getRow(3).getCell(5).setCellValue(deposit.getDepositNumber());
            sheet.getRow(3).getCell(7).setCellValue(deposit.getCreateName());
            sheet.getRow(4).getCell(1).setCellValue(deposit.getDestination());
          /*
         业务内容
         */
          // 浏览器打开下载窗口
            String fileName = deposit.getDepositNumber() + "出库单.xls";
            response.reset();
            response.setCharacterEncoding("UTF-8");
            // Content-disposition 浏览器以下载的形式打开
            String header = request.getHeader("User-Agent").toUpperCase();
            if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
                fileName = URLEncoder.encode(fileName, "utf-8");
                fileName = fileName.replace("+", "%20");
            } else {
                fileName = new String(fileName.getBytes(), "ISO8859-1");
            }
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
            response.setContentType("application/vnd.ms-excel");
    
            // 直接用数组缓冲输出流输出
            wb.write(response.getOutputStream());
           
    }

     留言

    注释里写的挺明白的我个人觉得,只要看完应该就可以操作了,

    具体的如何填充内容可以直接去搜索HSSFWorkbook,HSSFSheet,HSSFCellStyle,HSSFFont,HSSFRow,HSSFCell等API,

    看过一轮就知道怎么使用了,上面也有部分例子可以参考

    这个接口写完以后,已经可以直接用url访问下载文件了,剩下的就得交给前端了(那块我就不是很懂了)

    如果挂在云服务器上的话,需要将模板也传一份到自己制定的目录,然后将文件路径更改一下,才能使用

    比如:

     有更好的办法欢迎留言

  • 相关阅读:
    链表的头指针
    顺时针打印矩阵
    旋转数组的最小数字
    实现string类
    最长对称子串
    DFS和BFS
    最长公共子序列
    排序算法
    大端与小端
    交换两个数
  • 原文地址:https://www.cnblogs.com/Crush123/p/14365677.html
Copyright © 2011-2022 走看看