zoukankan      html  css  js  c++  java
  • springboot_poi思路

    开发工具:eclipse

    jar包管理:maven

    框架使用:springboot+poi+thymeleaf

    1.首先导入pom.xml

    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.16</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.16</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>3.16</version>
    </dependency>

    2.前端查询数据库

    展示要导出的列表

    3.点击导出通过js提交页面对应的标签值

    例如:function export(){

    window.location.href = resqURL;

    }

    注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    页面不能通过ajax访问url。 
    必须通过页面window.location.href = resqURL;属性来访问

    resqURL带参

    //前端
    <td id="sadd" name="oo">sadd</td>
    //js
    var oo=$("#sadd").text();
    window.location.href = "ha?sadd="+oo;
    //后端
        @RequestMapping("ha")
        public String ha(Model m,@RequestParam String sadd) {
            String oosda=sadd;
            System.out.println(oosda);
            m.addAttribute("name", "hah");
            return "hello";
        }

    我在这个地方吃了好大的亏,,,唉

    4.后台到controller层接受参数定制表头初始化数据

    @RequestMapping("export")
        public ResponseEntity<byte[]> userExcel() throws Exception {
            /*所有表头*/
            Map<String,Map<String,String>> titleMaps=new LinkedHashMap<String,Map<String,String>>();
            /*所有数据*/
            Map<String,List<Map>> results=new HashMap<String,List<Map>>();
            /*每个表格的列标题*/
            Map<String,String> title=new LinkedHashMap<String, String>();
            title.put("uid", "Id");
            title.put("username", "用户名");
            title.put("password", "密码");
            //行初始化为空值
            List<Map> nullRows=new ArrayList<Map>();
            Map nullMap=new HashMap();
            nullMap.put("uid", "");
            nullMap.put("username", "");
            nullMap.put("password", "");
            nullRows.add(nullMap);
            //文件名
            String filename="用户信息";
            titleMaps.put(filename, title);
            //从数据库查询数据
            List<Map> collentList=userService.userExcel();        
            results.put(filename, collentList);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
               ExcelUtilNew.exportExcelDocument(titleMaps, results,out);
            System.out.println("我来了");
             HttpHeaders headers = new HttpHeaders();
             headers.add("Content-Disposition", "attchement;filename=" + URLEncoder.encode(filename, "utf-8")+".xlsx");
            return new ResponseEntity<byte[]>(out.toByteArray(), headers, HttpStatus.CREATED);
            
        }

    3.调用poi工具类导出excel

    /**
         * 导出Excel文档
         * 
         * @throws FileNotFoundException
         */
        public static void exportExcelDocument(Map<String, String> titleMap, List<Map> result, OutputStream out)
                throws Exception {
            Map<String, Map<String, String>> titleMaps = new HashMap<String, Map<String, String>>();
            titleMaps.put("Sheet1", titleMap);
            Map<String, List<Map>> results = new HashMap<String, List<Map>>();
            results.put("Sheet1", result);
            exportExcelDocument(titleMaps, results, out);
        }
    
        public static void exportExcelDocument(Map<String, Map<String, String>> titleMaps, Map<String, List<Map>> results,
                OutputStream out) throws Exception {
            // 声明一个工作薄
            Workbook workbook = new HSSFWorkbook();
    
            for (String s : titleMaps.keySet()) {
                Map<String, String> titleMap = titleMaps.get(s);
                List<Map> result = results.get(s);
    
                // 生成一个表格
                Sheet sheet = workbook.createSheet((s == null || "".equals(s)) ? "未命名" : s);
                // 网格线
                sheet.setDisplayGridlines(true);
                // 设置默认表宽
                sheet.setDefaultColumnWidth(20);
                // 产生表格标题行
                Row row = sheet.createRow(0);
                // 生成一个样式
                CellStyle titleStyle = workbook.createCellStyle();
                // 设置这些样式
                titleStyle.setAlignment(CellStyle.ALIGN_CENTER);
                titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
    
                // 生成一个字体
                Font titleFont = workbook.createFont();
                titleFont.setFontName("Arial");
                titleFont.setFontHeightInPoints((short) 12);
                titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
                // 把字体应用到当前的样式
                titleStyle.setFont(titleFont);
                int count = 0;
                for (String key : titleMap.keySet()) {
                    Cell cell = row.createCell(count);
                    cell.setCellStyle(titleStyle);
                    cell.setCellValue(titleMap.get(key));
                    count++;
                }
                if (result != null) {
                    for (int i = 0, iSize = result.size(); i < iSize; i++) {
                        Map<String, Object> resultMap = result.get(i);
                        // 生成一个字体
                        Font contentFont = workbook.createFont();
                        contentFont.setFontName("宋体");
                        contentFont.setFontHeightInPoints((short) 10);
                        contentFont.setBoldweight(Font.BOLDWEIGHT_NORMAL);
                        // 生成一个样式
                        CellStyle contentStyle = workbook.createCellStyle();
                        contentStyle.setAlignment(CellStyle.ALIGN_LEFT);
                        contentStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
                        row = sheet.createRow(i + 1);
                        // 把字体添加到样式中去
                        contentStyle.setFont(contentFont);
                        count = 0;
                        for (String key : titleMap.keySet()) {
                            Cell cell = row.createCell(count);
                            cell.setCellStyle(contentStyle);
                            cell.setCellValue(String.valueOf(resultMap.get(key)));
                            count++;
                        }
                    }
                }
    
            }
            workbook.write(out);
            out.flush();
            out.close();
        }

    4.结束总结:

    通过springmvc封装的下载实现ResponseEntity将字符串输出成文件下载。

    ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);

  • 相关阅读:
    C#编程规范
    实用JavaScript代码库
    JSON入门
    asp.net基本事件
    iOS开发笔记 3、iOS基础
    iOS开发笔记 8、真机调试和发布软件
    数据同步框架MS Sync Framework不同场景使用例子和简要分析
    使用AppFabric 承载WCF和WF服务实例分析和说明
    .net程序员的iPhone开发MonoTouch
    iOS开发笔记 4、iOS中的Cocoa、设计模式等
  • 原文地址:https://www.cnblogs.com/DIVEY/p/10213312.html
Copyright © 2011-2022 走看看