Excel导出工具类---------java

实现的功能

maven依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.9</version>
</dependency>

具体实现如下

/**
 *
 * @param Map<Object,Object>:excLoad 具体配置:配置方法put("配置名",值);
 *      List<Map>  list  :导出的数据集(第一行标题除外)(必须配)
 *      Map<String,String> header:导出数据的标题(第一行的内容)及对应的name值 例如:age='年龄'(必需配)
 *      String fileName :导出的文件名,没有配置则为  sheet.xls
 *      String titName:表格标题,没有配置则不显示
 *      String describe:描述字段,没有配置则不显示,位置在表格标题下方,如没有配置标题则在第一行
 *      List<String> field:指定输出的列名(name值),没有配置则默认输出全部列,必需为header内有的name,长度小于header的长度
 *      Integer startId:指定导出的数据的开始序号,第一行数据为1,没有配置默认从第一个数据开始
 *      Integer endId:指定导出的数据的结束序号,没有配置默认为最后一个的数据序号
 *      String bottom :追加内容,显示在表格最后一行,没有配置则不显示
 * @param response
 * @return true/false
 */
public static boolean excLoad(Map<Object,Object> excLoad, HttpServletResponse response){

    //创建一个Excel对象
    HSSFWorkbook workbook=new HSSFWorkbook();

    //计数字段
    int rowNum=0;

    // 创建一个Excel的Sheet
    HSSFSheet sheet = workbook.createSheet();

    //创建一个字体样式
    HSSFFont headfont = workbook.createFont();
    headfont.setFontName("黑体");
    headfont.setFontHeightInPoints((short) 12);// 字体大小
    headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗

    //创建一个样式
    HSSFCellStyle headstyle = workbook.createCellStyle();
    headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
    headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中

    //List<LinkedHashMap> 导出的数据集(第一行标题除外)
    List<Map> list= (List<Map>) excLoad.get("list");
    list=list==null?null:list;

    //header 导出数据的标题(第一行的内容)及对应的name值 例如:age='年龄'
    Map<String,String> header= (Map<String, String>) excLoad.get("header");
    header=header==null?null:header;

    //fileName 导出的文件名
    String fileName= (String) excLoad.get("fileName");
    fileName=fileName==null?"sheet":fileName;

    //标题
    String titName= (String) excLoad.get("titName");
    titName=titName==null?null:titName;

    //描述
    String describe= (String) excLoad.get("describe");
    describe=describe==null?null:describe;

    //输出的字段列表
    List<String> field= (List<String>) excLoad.get("field");
    field=field==null?null:field;

    // 输出的开始位置
    Integer startId= (Integer) excLoad.get("startId");
    startId=startId==null?1:startId;

    //输出的结束位置
    Integer endId= (Integer) excLoad.get("endId");
    endId=endId==null?list.size():endId;

    //追加内容
    String bottom= (String) excLoad.get("bottom");
    bottom=bottom==null?null:bottom;

    //表第一列的标题名称数组
    List<String> headers=new ArrayList<>();

    //根据标题名称一一对应数据库映射字段(为了从map.get(key)取值)
    List<String> tableNames=new ArrayList<>();

    //表的总列数
    Integer sheetCount=null;

    //初始化headers和tableNames
    if(header!=null&&field==null){
        for (Map.Entry<String,String> entry : header.entrySet()) {
            headers.add(entry.getValue());
            tableNames.add(entry.getKey());
        }
        sheetCount=header.size();

    }

    //根据输出的字段列表,更改tableNames和headers的值
    if(field!=null){
        tableNames=field;
        for (String f : field) {
            headers.add(header.get(f));
        }
        sheetCount=headers.size();
    }


    for (int i = 0; i < sheetCount; i++) {
        //设置列宽
        sheet.setColumnWidth(i, 3766);
    }

    //设置第一行标题行,为null,则为空
    if(titName!=null){
        //设置样式
        HSSFCellStyle headstyle1=workbook.createCellStyle();
        headstyle1.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
        headstyle1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
        headstyle1.setFont(headfont);

        //创建第一行
        HSSFRow row0 = sheet.createRow(rowNum);
        row0.setHeight((short) 400);

        //合并单元格
        CellRangeAddress range= new CellRangeAddress(rowNum,rowNum,0,sheetCount-1);
        sheet.addMergedRegion(range);

        // 创建第一列
        HSSFCell cell0 = row0.createCell(0);
        cell0.setCellValue(new HSSFRichTextString(titName));

        //设置样式
        cell0.setCellStyle(headstyle1);

        rowNum++;
    }

    //设置描述行内容,为null,则为空
    if (describe!=null){
        //创建第一行
        HSSFRow row0 = sheet.createRow(rowNum);
        row0.setHeight((short) 300);

        //合并单元格
        CellRangeAddress range= new CellRangeAddress(rowNum,rowNum,0,sheetCount-1);
        sheet.addMergedRegion(range);

        // 创建第一列
        HSSFCell cell0 = row0.createCell(0);
        cell0.setCellValue(new HSSFRichTextString(describe));

        rowNum++;
    }

    //设置字段行
    HSSFRow rowField = sheet.createRow(rowNum);
    for (int i = 0; i < headers.size(); i++) {
        rowField.createCell(i).setCellValue(new HSSFRichTextString(headers.get(i)));
    }
    rowNum++;

    //添加具体数据
    HSSFRow rowValue=null;
    for (int i = startId-1; i < endId; i++) {
        rowValue = sheet.createRow(rowNum);
        for(int j=0 ;j<tableNames.size();j++){
                rowValue.createCell(j).setCellValue(new HSSFRichTextString(list.get(i).
                        get(tableNames.get(j)).toString()));
        }
        rowNum++;
    }

    //添加追加内容
    if(bottom!=null){
        HSSFRow rowBottom=sheet.createRow(rowNum);
        rowBottom.setHeight((short) 300);
        HSSFCell cell0 = rowBottom.createCell(0);
        cell0.setCellValue(new HSSFRichTextString(bottom));

        //合并单元格
        CellRangeAddress range= new CellRangeAddress(rowNum,rowNum,0,sheetCount-1);
        sheet.addMergedRegion(range);
    }

    try {
        response.setContentType("application/octet-stream;charset=utf-8");
        response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1") + ".xls");
        response.flushBuffer();
        workbook.write(response.getOutputStream());
    } catch (IOException e) {
        e.printStackTrace();
    }

    return true;

}

测试代码

    List<Map> list=new ArrayList<>();

    Map<String,String> map=new LinkedHashMap<>();
    map.put("name","张三");
    map.put("age","12");
    map.put("sex","男");
    list.add(map);

    Map<String,String> map2=new LinkedHashMap<>();
    map2.put("name","张三2");
    map2.put("age","122");
    map2.put("sex","男2");
    list.add(map2);

    Map<String,String> map3=new LinkedHashMap<>();
    map3.put("name","张三3");
    map3.put("age","123");
    map3.put("sex","男3");
    list.add(map3);

    Map<String,String> map4=new LinkedHashMap<>();
    map4.put("name","张三4");
    map4.put("age","1224");
    map4.put("sex","男4");
    list.add(map4);

    Map<String,String> map5=new LinkedHashMap<>();
    map5.put("name","张三5");
    map5.put("age","1225");
    map5.put("sex","男5");
    list.add(map5);

    Map<String,String> hearder=new LinkedHashMap<>();
    hearder.put("name","姓名");
    hearder.put("age","年龄");
    hearder.put("sex","性别");

  Map<Object,Object> map1=new HashMap<>();

    List<String> field=new ArrayList<>();
    field.add("name");
    field.add("age");

    map1.put("list",list);
    map1.put("header",hearder);
    map1.put("fileName","nice");
    map1.put("titName","这是个很高端的标题");
    map1.put("field",field);
    map1.put("bottom","这是追加内容");
    map1.put("describe","描述:test测试test测试test测试test测试test测试test测试test测试test测试test测试");
    map1.put("startId",2);
    map1.put("endId",4);
    Boolean a= ExcLoadUtil.excLoad(map1,response);
    System.out.println(a);

  源码如下:  https://download.csdn.net/download/qq_41974343/12437839

---------------------------------------------------------结束--------------------------------------------------

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值