zoukankan      html  css  js  c++  java
  • java使用jxls导出Excel

     jxls是基于POI的Excel模板导出导入框架。通过使用类似于jstl的标签,有效较少导出Excel的代码量。

    1.pom

            <!-- https://mvnrepository.com/artifact/net.sf.jxls/jxls-core -->
            <dependency>
                <groupId>net.sf.jxls</groupId>
                <artifactId>jxls-core</artifactId>
                <version>1.0.3</version>
            </dependency>

    2.模板样式

    一般数据直接绑定跟 jstl比较像,直接${name}

    循环就是 <jx:forEach items="${data}" var="item" varStatus="i" ></jx:forEach>

    3.代码演示

        @Test
        public void method1() throws Exception {
            // 循环数据
            List<Object> list = new ArrayList<>();
            for (int i = 0; i < 100; i++) {
                Map<String,Object> data = new HashMap<>();
                data.put("a1", (int)(Math.random()*100) );
                data.put("a2", (int)(Math.random()*100) );
                data.put("a3", (int)(Math.random()*100) );
                data.put("a4", (int)(Math.random()*100) );
                data.put("a5", (int)(Math.random()*100) );
                list.add(data);
            }
            // 表格使用的数据
            Map map = new HashMap();
            map.put("data",list);
            map.put("title","java基于模板导出excel表格");
            map.put("val","演示合并单元格的数据显示");
            // 获取模板文件
            InputStream is = this.getClass().getClassLoader().getResourceAsStream("x1.xls");
            // 实例化 XLSTransformer 对象
            XLSTransformer xlsTransformer = new XLSTransformer();
            // 获取 Workbook ,传入 模板 和 数据
            Workbook workbook =  xlsTransformer.transformXLS(is,map);
            // 写出文件
            OutputStream os = new BufferedOutputStream(new FileOutputStream("D://temp.xls"));
            // 输出
            workbook.write(os);
            // 关闭和刷新管道,不然可能会出现表格数据不齐,打不开之类的问题
            is.close();
            os.flush();
            os.close();
        }

    4.导出效果

    5.web环境下跑
    web环境下跑和上面的代码基本上一样,不一样的就是  OutputStream 的地方换成了  response.getOutputStream()

    然后  response 设置一下文件名, response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("报表.xls" ,"UTF-8"));

    如果这一步不懂得可以参考我得另一篇文章:https://blog.csdn.net/yali_aini/article/details/81745883

    代码:

    import net.sf.jxls.transformer.XLSTransformer;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.URLEncoder;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
    @Controller
    public class ReportController {
     
        @RequestMapping("/report")
        public void report(HttpServletRequest request , HttpServletResponse response){
            try{
                // 循环数据
                List<Object> list = new ArrayList<>();
                for (int i = 0; i < 100; i++) {
                    Map<String,Object> data = new HashMap<>();
                    data.put("a1", (int)(Math.random()*100) );
                    data.put("a2", (int)(Math.random()*100) );
                    data.put("a3", (int)(Math.random()*100) );
                    data.put("a4", (int)(Math.random()*100) );
                    data.put("a5", (int)(Math.random()*100) );
                    list.add(data);
                }
                // 表格使用的数据
                Map map = new HashMap();
                map.put("data",list);
                map.put("title","java基于模板导出excel表格");
                map.put("val","演示合并单元格的数据显示");
                // 获取模板文件
                InputStream is = this.getClass().getClassLoader().getResourceAsStream("x1.xls");
                // 实例化 XLSTransformer 对象
                XLSTransformer xlsTransformer = new XLSTransformer();
                // 获取 Workbook ,传入 模板 和 数据
                Workbook workbook =  xlsTransformer.transformXLS(is,map);
     
                // 设置文件名
                response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("报表.xls" ,"UTF-8"));
                // 写出文件
                OutputStream os = new BufferedOutputStream( response.getOutputStream() );
                // 输出
                workbook.write(os);
                // 关闭和刷新管道,不然可能会出现表格数据不齐,打不开之类的问题
                is.close();
                os.flush();
                os.close();
            }catch (Exception e){
            
            }
        }
    }

    访问 /report/ 连接时就直接下载文件了,打开看和刚才测试跑的是一样的。

    ————————————————
    版权声明:本文为CSDN博主「临窗,听雨声」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/yali_aini/article/details/85804466

  • 相关阅读:
    初识HTML5
    java_类的有参方法
    示例:人机猜拳(请各位大佬看下)
    java-类和对象(笔记)
    Redis设计与实现——多机数据库的实现
    Redis设计与实现——独立功能的实现
    mina
    GUAVA-cache实现
    GUAVA-ListenableFuture实现回调
    Netty多协议开发
  • 原文地址:https://www.cnblogs.com/ryelqy/p/11496353.html
Copyright © 2011-2022 走看看