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

2023-11-05

导入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;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

poi 导出excel工具类包含导出内容为List<Map<String,Object>>,List<List<Object>> 的相关文章

  • 编辑/更改服务器上的 300 多项选择

    我编辑了所有服务器 http 状态消息 当我输入错误的地址时 300 个多项选择仍然显示 所以它向我显示选项 你知道我怎样才能摆脱它吗 我不希望用户有选择 我想重定向到 index html 或者我想显示自己创建的带有 gt 返回 的消息页
  • PHP Microsoft Excel 文件生成/导出类

    我一直在寻找一个好的 Excel 文件生成类 但还没有找到 我的首要问题是 虽然我可以在 Excel 中打开导出的文件 运行 2007 年 但我总是收到一条警告 文件的格式与文件扩展名不同 我注意到 phpMyAdmin 中的 Excel
  • 如果工作表不存在,Pandas 将工作表附加到工作簿,否则覆盖工作表

    我正在使用 pandas 更新现有的 Excel 工作簿 当使用ExcelWriter对象 我可以覆盖工作表 如果存在 否则创建一个新工作表吗 我的代码附加了新工作表 但是当我尝试覆盖现有工作表时 它会附加一个名称略有不同的新工作表 例如
  • 使用Excel宏执行命令并关闭cmd窗口

    这是我现在正在尝试的 Sub del BJSFM files Call Shell cmd exe S K cd d C UTAS SA del f s q BJSFM gt nul vbNormalFocus End Sub 问题是命令窗
  • 为什么 MS Excel 在 Worksheet_Change Sub 过程中崩溃并关闭?

    当我在 Excel 工作表上运行 VBA 代码时 我遇到了 Excel 崩溃的问题 我正在尝试在工作表更改中添加以下公式 Private Sub Worksheet Change ByVal Target As Range Workshee
  • 雅虎财经历史股价动力查询返回301响应

    直到今天我的 Excel 2016 power query 都能够从以下 URL 获取历史股票定价数据https finance yahoo com quote AAL history p AAL https finance yahoo c
  • 在浏览器中读取wsdl文件

    当我尝试在浏览器中打开 WSDL 文件 http localhost something file wsdl 时 我被提议下载该文件 但我希望能够在浏览器中以 XML 字符串 形式查看 而不是下载 谢谢 如果您的服务器未发送 WSDL 文件
  • 使用 SpreadsheetLight 进行行计数

    我正在寻找一个类似于 DataTable Rows Count 的函数 它可以与 SLDocument 一起使用来找出有多少行中有数据 SpreadsheetLight 中有可用的东西吗 还有其他方法可以实现这一目标吗 Brendan SL
  • 仅使用 mod_rewrite 重定向主页

    我有一个需要重定向的网站 但我不能只重定向 目录 因为服务器上的文件夹中还有其他网站 这样做也会重定向它们 不好 因此 我的 htaccess 文件包含一堆针对各个 HTML 页面的 301 重定向 并且这些文件工作得很好 但我需要重定向主
  • 连接到 mysql 服务器(localhost)非常慢

    实际上有点复杂 摘要 与数据库的连接非常慢 页面渲染大约需要 10 秒 但页面上的最后一条语句是一个回显 当页面在 Firefox 中加载时我可以看到它的输出 IE 是相同的 在谷歌浏览器中 只有在加载完成后输出才可见 不同浏览器的加载时间
  • 强制 mod_rewrite 的 RewriteRule 替换的 URL 路径

    使用 mod rewrite 执行重写时RewriteRule 根据替换的根目录是否存在于文件系统上 评估替换并猜测它是 URL 还是文件系统路径 这是相关部分文档 https httpd apache org docs 2 4 mod m
  • 如何通过VBA代码修复仅在Excel共享模式下发生的运行时错误400

    我真的不知道400错误是什么原因造成的 下面的代码在正常模式下运行得很好 但是一旦我在共享模式下启用 Excel 并尝试使用用户表单 它就会给我 VBA 400 我在这里尝试做的是在向用户显示用户表单后更改形状的文本并禁用其 OnActio
  • 为什么这个 FilesMatch 匹配不正确?

    我们一直在尝试将服务器配置为不缓存 htm 文件 因为它会导致我们的分析包出现一些问题 并且如果访问者点击浏览器中的后退按钮 则无法正确显示页面 我们尝试通过添加以下内容来解决这个问题
  • 求除某些列之外的 SUM

    以下是我所拥有的 A B C D E F G H I J K 1 2 3 4 5 6 7 8 9 10 50 为了找到SUM
  • 是否有任何公式可用于将特定单元格复制指定次数?

    目前我正在处理一份数据 其中我有一个公司名称列表 例如 1 A 2 B 3 C 还有很多 需要的结果是 1 A 2 A 3 A 4 A 5 A 6 B 7 B 8 B 9 B 10 B 11 C 12 C 13 C 14 C 15 C 等等
  • htaccess“命令”拒绝、允许、拒绝

    我只想允许一个国家 地区访问 但排除该国家 地区内的代理 这就是我所拥有的 为了方便起见缩短版本
  • 如何禁用在 Apache 中向目录名添加尾部斜杠的 301 重定向

    Apache 2 2 20 自动将所有指向目录且没有尾部斜杠的请求重定向到带有尾部斜杠的相同 URL 如下所示 GET some path to dir HTTP 1 1 Host www some org 301 Moved perman
  • 如何将多个 Excel 工作表转换为 csv python

    我想转换所有的excel文档 xls 将工作表转换为 csv 如果 excel 文档只有一张工作表 那么我将进行如下转换 wb open workbook path1 sh wb sheet by name Sheet1 csv file
  • 在 Django(Python) 中向用户提供 Excel(xlsx) 文件下载

    我正在尝试使用 Django 创建和提供 Excel 文件 我有一个 jar 文件 它获取参数并根据参数生成 excel 文件 并且它可以正常工作 但是 当我尝试获取生成的文件并将其提供给用户下载时 文件损坏了 它的大小为 0kb 这是我用
  • VBA全局类变量

    我的障碍是试图让多个子程序识别类变量 当我尝试全局声明它们时 出现编译错误 无效的外部过程 然后 当我运行公共函数或子函数来声明变量时 它们在其他子函数中保持未定义状态 我希望多个子程序能够识别变量 因为它们的值应该通过用户窗体进行更改 然

随机推荐

  • 在matlab中实现图像的自相关和互相关

    图像的自相关 clear I1 imread lenna bmp bmp 输入图像1 参考图像 I1 I1 1 figure 1 显示输入图像1 colormap gray 255 image I1 axis off FI1 fft2 I1
  • XCode14 & iOS16适配 pod签名

    一 iOS16手机开启开发者模式 developer mode disable iOS16手机未打开开发者模式时 1 Xcode 无法选中 iOS16的设备 报错 developer mode disable 2 无法打开升级前编译的App
  • 解决 Axios 跨域问题,轻松实现接口调用

    跨域是指访问另外一个域的资源 由于浏览器的同源策略 默认情况下使用 XMLHttpRequest 和 Fetch 请求时是不允许跨域的 跨域的根本原因是浏览器的同源策略 这是由浏览器对 JavaScript 施加的安全限制 Axios 跨域
  • 使用python简单创建自动点击脚本,使用的是pyautogui

    所有代码在最后面 首先引入包 首先引入包 import pyautogui 鼠标控制包 import time 时间包 后面要用 然后获取需要点击的坐标 for i in range 5 通过循环加延迟 获取鼠标位置 mouse pyaut
  • 推荐 9 个经典前后端分离项目

    前后端分离是现在主流的架构设计模式 它初衷是用 单一职责 原则把代码质量提上去从而达到节省人力和减少沟通时的信息损失的目的 本文推荐九个前后端分离的开源项目 都是采用最流行的技术栈 本文推荐的开源项目已经收录到 Awesome GitHub
  • 黑苹果Mac系统快捷键修改

    由于苹果机的键盘和普通PC机的键盘不同 因此苹果机的快捷键也会与普通PC不同 这对于我们这些经常使用键盘的人来说非常不便 下面附上两者的不同 普通键盘 苹果键盘 修改快捷键 我推荐的软件是KeyBindingsEditor 它很好用 另外需
  • The Evaluation of Language Model (语言模型的性能评价方法 Perplexity)

    The Evaluation of Language Model 语言模型的性能评价 语言模型 Language Model 以下简称LM 直观理解 用于判断一句话是否从语法上通顺 Question 1 训练好的LM效果是好还是坏 如何评价
  • L2-014 列车调度 (25 分)详解

    火车站的列车调度铁轨的结构如下图所示 两端分别是一条入口 Entrance 轨道和一条出口 Exit 轨道 它们之间有N条平行的轨道 每趟列车从入口可以选择任意一条轨道进入 最后从出口离开 在图中有9趟列车 在入口处按照 8 4 2 5 3
  • kali渗透--msf简单使用

    使用MSF Metasploit 利用MS12 020 RDP远程代码执行漏洞 实验环境准备 1 一台 winXP 作为受害者 最好拍摄好一个快照 IP 10 1 1 2 2 kali 作为攻击者 IP 10 1 1 1 3 将攻击者和受害
  • 常用命令图解 & & git 错误 fatal: Not a valid object name: ‘master‘.

    亲测可用 若有疑问请私信 常用命令图解 转自Git 常用命令详解 二 阳光岛主的博客 CSDN博客 git命令 Git 是一个很强大的分布式版本管理工具 它不但适用于管理大型开源软件的源代码 如 linux kernel 管理私人的文档和源
  • Python画各种爱心

    目录 一行代码画爱心 拆解 输出 I U 填充型 动态画红心 桃心 线性 立体红心 玫瑰 树 一行代码画爱心 print n join join Love x y len Love if x 0 05 2 y 0 1 2 1 3 x 0 0
  • 学科竞赛管理系统服务器错误,学科竞赛管理系统

    系统功能模块如下 1 平台首页 整个平台首页分为政策文件 竞赛列表 在线报名 成果展示 通知公告 新闻中心 联系方式 系统登录 下载中心 快速导航等功能模块 所有模块内容全部支持系统后台进行添加 编辑 删除等操作 2 竞赛管理 1 竞赛项目
  • TensorRT/parsers/caffe/caffeParser/caffeParser.h源碼研讀

    TensorRT parsers caffe caffeParser caffeParser h源碼研讀 前言 TensorRT parsers caffe caffeParser caffeParser h delete this std
  • mysql中的枚举enum_mysql中枚举类型之enum详解

    enum类型就是我们常说的枚举类型 它的取值范围需要在创建表时通过枚举方式 一个个的列出来 显式指定 对1至255个成员的枚举需要1个字节存储 对于255至65535个成员 需要2个字节存储 最多允许有65535个成员 先通过sql语句创建
  • Latex 算法Algorithm

    在计算机科学当中 论文当中经常需要排版算法 相信大家在读论文中也看见了很多排版精美的算法 本文就通过示例来简要介绍一下 algorithms 束的用法 该束主要提供了两个宏包 包含两种进行算法排版的环境 algorithm 和 algori
  • java base64转文件_java之文件与base64字符之间的相互转换

    package cn xuanyuan util import java io File import java io FileInputStream import java io FileOutputStream import sun m
  • 大数据 机器学习 分类算法_13种用于数据科学的机器学习分类算法及其代码

    大数据 机器学习 分类算法 The roundup of most common classification algorithms along with their python and r code 吨 他的Roundup与他们的Pyt
  • WSL安装JDK8

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 下载地址 JDK URL https www oracle com technetwork java javase downloads jdk8 downloads 213
  • 压缩感知进阶——有关稀疏矩阵

    上一篇 初识压缩感知Compressive Sensing 中我们已经讲过了压缩感知的作用和基本想法 涉及的领域 本文通过学习陶哲轩对compressive sensing CS 的课程 对压缩感知做进一步理解 针对其原理做出讲解 本文较为
  • poi 导出excel工具类包含导出内容为List<Map<String,Object>>,List<List<Object>>

    导入jar