ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

poi 导出excel工具类包含导出内容为List<Map<String,Object>>,List<List<Object>>

2021-05-12 17:29:18  阅读:331  来源: 互联网

标签:obj String List Object 导出 cell workbook import setCellValue


导入jar

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

工具类ExportExcel


import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
//这里所需要的参数是  表格文件名  表格的sheet的名称   与表格的头部内容 和数据集合,以及response
/**
 * Created by Bob on 2021/4/7.
 */
public class ExportExcel
{
    public static boolean exportExcel(String excelName, String title, String[] headers, List<Map> dataset, String pattern, HttpServletResponse response) throws IOException {
//        Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        long milliSecond = System.currentTimeMillis();
        String fileName = excelName + "-" + milliSecond + ".xls";
        ServletOutputStream outputStream = response.getOutputStream();
        response.setContentType("application/x-xls;charset=UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);

        boolean flag = false;
        Workbook workbook = null;
        if (fileName.endsWith("xlsx"))
        {
            workbook = new XSSFWorkbook();
        } else if (fileName.endsWith("xls"))
        {
            workbook = new HSSFWorkbook();
        } else
        {
            try
            {
                throw new Exception("invalid file name, should be xls or xlsx");
            } catch (Exception e)
            {
                e.printStackTrace();
            }

        }

        Sheet sheet = workbook.createSheet(title);
        CellStyle style = workbook.createCellStyle();

        // 列名
        Row row = sheet.createRow(0);
        for (int i = 0; i < headers.length; i++)
        {
            Cell cell = row.createCell(i);
            sheet.setColumnWidth(i, 5000);
//            style.setAlignment(CellStyle.ALIGN_CENTER);
            cell.setCellValue(headers[i]);
        }

        Iterator<Map> it = dataset.iterator();
        int index = 0;
        while (it.hasNext())
        {
            index++;
            row = sheet.createRow(index);

            Map map = it.next();//当前这个list集合中的map
//            logger.info(map.toString());

            Set<String> mapKey = (Set<String>)map.keySet();//获取当前这个map的键的set集合
//            logger.info(mapKey.toString());
            Iterator<String> iterator = mapKey.iterator();
//            logger.info(iterator.toString());
            int num  = 0;
            while(iterator.hasNext()){
                Cell cell = row.createCell(num);
                num++;
                String key = iterator.next();//这个iterator.next就是这个map中的key
                //为保证map有序用linkedhashmap
//                LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
//                logger.info(key);
                Object obj = map.get(key);
                if (obj instanceof Date)
                {
                    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                    cell.setCellValue(sdf.format(obj));
                } else if (obj instanceof Integer)
                {
                    cell.setCellValue((Integer) obj);
                } else if (obj instanceof Double)
                {
                    cell.setCellValue((Double) obj);
                } else
                {
                    cell.setCellValue((String) obj);
                }
            }
        }
        FileOutputStream fos;
        try
        {
            workbook.write(outputStream);
            outputStream.flush();
            outputStream.close();
            flag = true;
        } catch (FileNotFoundException e)
        {
//            logger.info("文件不存在");
            flag = false;
            e.printStackTrace();
        } catch (IOException e)
        {
//            logger.info("文件写入错误");
            flag = false;
            e.printStackTrace();

        }
        return flag;
    }


    /**
     * 改造后的方法
     *
     */


    public static boolean exportMap(String excelName, String title, String[] headers, List<LinkedHashMap<String,Object>> dataset, String pattern, HttpServletResponse response) throws IOException {
//        Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        long milliSecond = System.currentTimeMillis();
        String fileName = excelName + "-" + milliSecond + ".xls";
        ServletOutputStream outputStream = response.getOutputStream();
        response.setContentType("application/x-xls;charset=UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        boolean flag = false;
        Workbook workbook = null;
        if (fileName.endsWith("xlsx"))
        {
            workbook = new XSSFWorkbook();
        } else if (fileName.endsWith("xls"))
        {
            workbook = new HSSFWorkbook();
        } else
        {
            try
            {
                throw new Exception("invalid file name, should be xls or xlsx");
            } catch (Exception e)
            {
                e.printStackTrace();
            }

        }

        Sheet sheet = workbook.createSheet(title);
        CellStyle style = workbook.createCellStyle();

        // 列名
        Row row = sheet.createRow(0);
        for (int i = 0; i < headers.length; i++)
        {
            Cell cell = row.createCell(i);
            sheet.setColumnWidth(i, 5000);
//            style.setAlignment(CellStyle.ALIGN_CENTER);
            cell.setCellValue(headers[i]);
        }

//        Iterator<Map> it = dataset.iterator();quchu
        Iterator<LinkedHashMap<String, Object>> it = dataset.iterator();

        int index = 0;
        int judgecount = 0;
        while (it.hasNext())
        {
            index++;
            judgecount++;
            row = sheet.createRow(index);
            LinkedHashMap<String, Object> linkedHashMap = it.next();
            Set<String> linkkey = linkedHashMap.keySet();

            Iterator<String> keyiterator = linkkey.iterator();//每一行key的集合
            int a = 0;
            Cell cell1 = row .createCell(a);
            a++;
            if (judgecount == 1){
                cell1.setCellValue(index);//新增添加序号
            }
            while (keyiterator.hasNext()){
                Cell cell = row.createCell(a);
                a++;
                if (judgecount == 1){
                    judgecount--;
                }

                String link_key = keyiterator.next();
                Object obj = linkedHashMap.get(link_key);
                if (obj instanceof Date)
                {
                    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                    cell.setCellValue(sdf.format(obj));
                } else if (obj instanceof Integer)
                {
                    cell.setCellValue((Integer) obj);
                } else if (obj instanceof Double)
                {
                    cell.setCellValue((Double) obj);
                } else if (obj instanceof BigDecimal){
                    int i = ((BigDecimal) obj).intValue();
                    cell.setCellValue(i);
                } else
                {
                    cell.setCellValue((String) obj);
                }

            }
        }
        FileOutputStream fos;
        try
        {
            workbook.write(outputStream);
            outputStream.flush();
            outputStream.close();
            flag = true;
        } catch (FileNotFoundException e)
        {
//            logger.info("文件不存在");
            flag = false;
            e.printStackTrace();
        } catch (IOException e)
        {
//            logger.info("文件写入错误");
            flag = false;
            e.printStackTrace();

        }
        return flag;
    }
}

标签:obj,String,List,Object,导出,cell,workbook,import,setCellValue
来源: https://blog.csdn.net/weixin_39708283/article/details/116715655

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有