java中的Excel导出

2023-11-01

1、在pom.xml文件中添加maven依赖

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

2、前端代码

<script src="../../js/jquery-1.11.1.min.js"></script>
<script src="../../js/bootstrap.min.js"></script>
<script src="../../js/bootstrap-modal.js"></script>
<button type="button" class="btn btn-primary" onclick="stockPrizeExport()">库存导出</button>
/**导出库存清单*/
function stockPrizeExport(){
    debugger;
    var index = layer.confirm('确定要导出现有库存奖品吗?', {
        btn: ['确定','取消'],title: "提示" //按钮
    }, function(){
        $("#global_body").mask("数据正在下载,请耐心等待...");
        $.ajax({
            url: '/activityList/stockPrizeExport.do',
            type: 'post',
            async: true,
            dataType : "json",
            error : function(data) {
                $("#global_body").unmask();
                layer.alert("库存奖品导出异常!");
            },
            success : function(data) {
                debugger;
                $("#global_body").unmask();
                if(data.resultCode==200){
                    window.location.href = data.path;
                }
                layer.close(index);
            }
        });
    });
}

3、后台代码

String filePath = request.getSession().getServletContext().getRealPath(File.separator) + "/excleFile/stockListExport/";
/**获取需要下载的Excle文件的名称*/
String fileName = activityManagerService.getDownloadExcleFilePath(filePath);
String path = "/excleFile/stockListExport/" + fileName;

 

/**
 * 获取需要下载文件名称
 *
 * @param parameterMap
 * @return
 */
@Override
@Transactional
public String getDownloadExcleFilePath(String filePath) throws Exception {

    String returnExclePath = "";//需要返回的文件名称
    String downloadExcleFileName = "";//需要下载的Excle的名称
    XSSFWorkbook workbook = new XSSFWorkbook();
    /**库存奖品清单*/
    List<Map<String, Object>> stockPrizeList = activityManagerDao.stockPrizeExport();
    workbook = exportExcel(stockPrizeList);
    downloadExcleFileName = "库存奖品清单";//需要导出的Excle的名称
    OutputStream out = null;
    File file1 = new File(filePath);
    //如果文件夹不存在则创建
    if (!file1.exists()) {
        file1.mkdir();
    }
    String fileName = downloadExcleFileName + ".xlsx";
    File file = new File(filePath + fileName);
    if (file.exists()) {
        file.delete();
    }
    out = new FileOutputStream(filePath + fileName); // 输出目的地
    workbook.write(out);

    returnExclePath = fileName;
    return returnExclePath;
}
/**
 * 给Excle中填充数据
 *
 * @param dataList
 * @return
 * @throws Exception
 */
private XSSFWorkbook exportExcel(List dataList, Integer type) throws Exception {
    XSSFWorkbook workbook = null;
    try {
        workbook = new XSSFWorkbook();
        //创建工作表实例
        XSSFSheet sheet = workbook.createSheet("sheet1");
        //设置列宽
        this.setSheetColumnWidth(sheet, type);
        //获取样式
        XSSFCellStyle style = this.createTitleStyle(workbook);

        if (dataList != null && dataList.size() > 0) {
            //创建表头
            XSSFRow row = sheet.createRow((short) 0);
            this.createCell(row, 0, style, XSSFCell.CELL_TYPE_STRING, "序号");
            this.createCell(row, 1, style, XSSFCell.CELL_TYPE_STRING, "奖品名称");
            this.createCell(row, 2, style, XSSFCell.CELL_TYPE_STRING, "奖品规格");
            this.createCell(row, 3, style, XSSFCell.CELL_TYPE_STRING, "剩余件数");
            this.createCell(row, 4, style, XSSFCell.CELL_TYPE_STRING, "奖品类型");
            this.createCell(row, 5, style, XSSFCell.CELL_TYPE_STRING, "库存导入人");
            this.createCell(row, 6, style, XSSFCell.CELL_TYPE_STRING, "库存导入时间");
            this.createCell(row, 7, style, XSSFCell.CELL_TYPE_STRING, "库存奖品状态");

            //给excel填充数据
            for (int i = 0; i < dataList.size(); i++) {
                //填充数据
                Map<String, String> data = (Map<String, String>) dataList.get(i);
                //创建新行
                XSSFRow row1 = sheet.createRow((short) (i + 1));
                this.createCell(row1, 0, style, XSSFCell.CELL_TYPE_STRING, i + 1);

                if (data.get("stock_prize_name") != null) {//奖品名称
                    this.createCell(row1, 1, style, XSSFCell.CELL_TYPE_STRING, data.get("stock_prize_name"));
                }
                if (data.get("stock_prize_model") != null) {//奖品规格
                    this.createCell(row1, 2, style, XSSFCell.CELL_TYPE_STRING, data.get("stock_prize_model"));
                }

                if (data.get("stock_overplus_count") != null) {//剩余件数
                    this.createCell(row1, 3, style, XSSFCell.CELL_TYPE_STRING, data.get("stock_overplus_count"));
                }
                if (data.get("stock_prize_type") != null) {//奖品类型
                    String stockPrizeType = "";//奖品类型
                    switch (data.get("stock_prize_type")) {
                        case "1":
                            stockPrizeType = "电子卷";
                            break;
                        case "2":
                            stockPrizeType = "实物";
                            break;
                    }
                    this.createCell(row1, 4, style, XSSFCell.CELL_TYPE_STRING, stockPrizeType);
                }
                if (data.get("creation_by") != null) {//库存导入人
                    this.createCell(row1, 5, style, XSSFCell.CELL_TYPE_STRING, data.get("creation_by"));
                }
                if (data.get("creation_date") != null) {//库存导入时间
                    this.createCell(row1, 6, style, XSSFCell.CELL_TYPE_STRING, data.get("creation_date"));
                }
                if (data.get("stock_prize_status") != null) {//库存奖品状态
                    String stockPrizeStatus = "";//库存奖品状态
                    switch (data.get("stock_prize_status")) {
                        case "0":
                            stockPrizeStatus = "禁用";
                            break;
                        case "1":
                            stockPrizeStatus = "启用";
                            break;
                    }
                    this.createCell(row1, 7, style, XSSFCell.CELL_TYPE_STRING, stockPrizeStatus);
                }
            }
        } else {
            this.createCell(sheet.createRow(0), 0, style, XSSFCell.CELL_TYPE_STRING, "查无资料");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return workbook;
}
/**
 * 设置列宽与列数
 *
 * @param sheet
 */
private void setSheetColumnWidth(XSSFSheet sheet, Integer type) throws Exception {
    // 根据你数据里面的记录有多少列,就设置多少列
    sheet.setColumnWidth(0, 1000);
    sheet.setColumnWidth(1, 4000);
    sheet.setColumnWidth(2, 4000);
    sheet.setColumnWidth(3, 2000);
    sheet.setColumnWidth(4, 2000);
    sheet.setColumnWidth(5, 3000);
    sheet.setColumnWidth(6, 6000);
    sheet.setColumnWidth(7, 3000);
}
/**
 * 设置excel的title样式
 *
 * @param wb
 * @return
 */
private XSSFCellStyle createTitleStyle(XSSFWorkbook wb) throws Exception {
    XSSFFont boldFont = wb.createFont();
    boldFont.setFontHeight((short) 200);
    XSSFCellStyle style = wb.createCellStyle();
    style.setFont(boldFont);
    style.setDataFormat(HSSFDataFormat.getBuiltinFormat("###,##0.00"));
    return style;
}
/**
 * 创建Excel单元格
 *
 * @param row
 * @param column
 * @param style
 * @param cellType
 * @param value
 */
private void createCell(XSSFRow row, int column, XSSFCellStyle style, int cellType, Object value) throws Exception {
    XSSFCell cell = row.createCell(column);
    if (style != null) {
        cell.setCellStyle(style);
    }
    switch (cellType) {
        case XSSFCell.CELL_TYPE_BLANK: {
        }
        break;
        case XSSFCell.CELL_TYPE_STRING: {
            cell.setCellValue(value.toString());
        }
        break;
        case XSSFCell.CELL_TYPE_NUMERIC: {
            cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);
            cell.setCellValue(Double.parseDouble(value.toString()));
        }
        break;
        default:
            break;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中的Excel导出 的相关文章

  • 用 @DataJpaTest 注释的测试不是用 @Autowired 注释的自动装配字段

    我有一个 Spring Boot 应用程序 其中包含 Spring Data Jpa 存储库 我需要围绕这个存储库运行单元 或组件 测试 我对 Spring Data Jpa 没有太多经验 这是我的测试 这很简单 我无法让它通过 impor
  • 由于连接超时,无法通过 ImageIO.read(url) 获取图像

    下面的代码似乎总是失败 URL url new URL http userserve ak last fm serve 126 8636005 jpg Image img ImageIO read url System out printl
  • 使用 Checkstyle Plugin 时从插件调用代码时出现问题:“org.eclipse.jface”

    我正在尝试在 Rational Software Architect 7 0 0 4 上使用 eclipse cs 插件 我最近卸载了旧的 beta2 版本并安装了 beta3 插件本身按照之前的配置工作 但是每当我尝试通过 Windows
  • 如何对 IntStream 进行逆序排序

    我正在使用 txt 文件读取数字BufferedReader 我想颠倒该流中元素的顺序 以便在收集它们时 它们将从最高到最低排列 我不想在构建数组后进行排序 因为我不知道其中可能有多少元素 我只需要最高的 N 个元素 in new Buff
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • 所有junit测试后的清理

    在我的项目中 我必须在所有测试之前进行一些存储库设置 这是使用一些棘手的静态规则来完成的 然而 在所有测试之后我不知道如何进行清理 我不想保留一些神奇的静态数字来引用所有测试方法的数量 我应该一直维护它 最受赞赏的方法是添加一些侦听器 该侦
  • cucumber-junit-platform-engine 中的功能文件发现

    In cucumber junit我使用的库 CucumberOptions定义功能文件位置 package com mycompany cucumber import cucumber api CucumberOptions import
  • 使用 java 按电子邮件发送日历邀请

    我正在尝试使用 java 发送每封电子邮件的日历邀请 收件人收到电子邮件 但不会显示接受或拒绝的邀请 而是将该事件自动添加到他的日历中 我正在使用 ical4j jar 构建活动 邀请 private Calendar getInvite
  • 想要开发像 Facebook 这样的网站 - 处理数百万个请求 - 高性能 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想用 Java 开发一个像 Fac
  • VBA删除列中的单元格并根据单元格的值左移?

    如果单元格为空 如何删除 B 列 和左移 中的单元格 下面是我所拥有的 但它给出了 应用程序定义或对象定义的错误 Sub DeleteCellShiftLeft For i 1000 To 1 Step 1 If Cells i B Val
  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • 从 html 页面和 javascript 调用 java webservice

    我正在尝试从 javascript 调用 java 实现的 Web 服务 使用 NetBeans IDE 我读过很多关于 jQuery 和 AJAX 的内容 但我似乎无法掌握它 假设我的 Web 服务 WSDL 位于 http localh
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • OpenJDK 版本控制

    上下文 我想确保我们系统上安装的 Java 不受 CVE 2022 21449 的影响 java version 给出 openjdk version 11 0 7 2020 04 14 LTS OpenJDK Runtime Enviro
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • 为什么 BufferedWriter 不写入文件?

    我有这个代码 String strings Hi You He They Tetrabenzene Caaorine Calorine File file new File G words txt FileWriter fWriter Bu

随机推荐

  • 基于select实现socket的超时功能

    今天遇到一个要求 套接字连上之后 由于在recv数据时就阻塞住了 一般会要求等待5s之后假如超时就返回失败 通过select实现了一下要求 define BUF SIZE 128 define RESPONSE TIMEOUT 5 int
  • Unity 输出图集中的图片

    1 大图导入unity 修改配置 Texture Type Sprite 2D and UI Sprite Mode Multiple Read Write enabled true format RGBA 32 bit 脚本如下 usin
  • finereport普通报表的移动端自适应方案

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 移动端报表呈现 首先要求的是页面随手机屏幕大小自动放缩 自适应 下面给出一个普通报表中的finereport移动端自适应方案 适用于finereport 7 1之前的版本
  • 常用的正则表达式

    Email地址 w w w w w w 域名 a zA Z0 9 a zA Z0 9 0 62 a zA Z0 9 a zA Z0 9 0 62 电话号码 1 3 d 4 5 9 5 0 35 9 6 2567 7 0 8 8 d 9 0
  • CTFshow web入门 web2

    CTFshow web入门 web2 点开链接 发现鼠标右键无法调出快捷菜单 按F12也没用 这可能也对应了题目的 JS前台拦截 不懂 我猜应该是 通过手动点击浏览器开发者工具 我用的是谷歌浏览器 在浏览器关闭按钮下方的三个小点里 也可以利
  • 视频教程-手机订餐管理系统商业项目视频课程-Java

    手机订餐管理系统商业项目视频课程 19年软件开发经验 设计开发40多个大型软件 10年从事高等教育 主要为java系列课程 带你轻松进入java生涯 赖国荣 198 00 立即订阅 扫码下载 CSDN程序员学院APP 1000 技术好课免费
  • linux局域网下远程启动机器

    环境说明 两台局域网内的linux主机 本环境的系统为centos 5 3 X86 64 控制主机为 192 168 10 149 被控制主机为 192 168 10 150 一 在控制主机上安装远程开机需要的软件 root tomcat2
  • Keil5不显示结构体提示的办法

    如果你已经排除了汉化与文件名问题 且发现Configuration 配置 下Text Completi on 文本补语 中不存在Show Code Completion List for 显示代码完成列表 有可能是因为你同时安装了MDK5和
  • 组件page-container的使用 避免踩坑!!

    属性介绍 page container是微信小程序的一个视图容器 主要的功能就是实现一个弹窗的功能 该组件所包含的属性不多 比较关键的属性就是显示容器和容器位置的属性以及各种事件触发函数 如下 show主要通过一些page containe
  • 论文阅读—基于采样的快速区域优化

    kRRT Kinodynamic B RRT 选取吸引点 实验 前端 双向运动 缩短时间 通过采样方向划定有偏采样 实现轨迹的区域优化 A 产生吸引点 减少迭代次数 后端区域优化 5阶多项式 BVP求解有约束方程 Kinodynamic B
  • 数据结构进阶篇,链表专题

    2 两数相加 题目 给你两个 非空 的链表 表示两个非负的整数 它们每位数字都是按照 逆序 的方式存储的 并且每个节点只能存储 一位 数字 请你将两个数相加 并以相同形式返回一个表示和的链表 你可以假设除了数字 0 之外 这两个数都不会以
  • matlab求多元函数的极小值,如何用matlab或lingo求解多元函数的最小值

    如何用matlab或lingo求解多元函数的最小值 求最优成本 minC minC X P 价格P固定 重量X变动为整数 如无法得出整数解 有小数解也可 X x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 P
  • Unity入门(一)——Unity的安装与相关环境配置

    大家好 最近我打算入门Unity 也在网络找了一些教程进行学习 现在就由我为大家分享一下自己的学习过程 也作为入门Unity的学习记录 安装与环境配置 unity官网 Unity官网下载 下载并安装Unity Hub 然后在unity hu
  • element UI 按需引入

    1 npm安装 全局安装element npm i element ui S 2 按需引入 借助 babel plugin component 2 1 首先安装 babel plugin component npm install babe
  • 微信网页分享:错误码:63002,invalid signature(只改了APPID和SECRET就不行了)

    网上有说明配置白名单 JS域名 什么的就不再说明了 我遇到的情况是改了APPID和SECRET 就报错误码 63002 invalid signature 原因是改之前调用了之前的APPID和SECRET 这个会保存一个access tok
  • pygame.surface.blit()方法4个参数的使用方法

    pygame surface blit方法将一个图像 Surface实例 绘制到另一个图像 Surface实例 上 如screen是一个Surface实例 方法blit具体使用方法如下 rect screen blit source des
  • 无线通信复习大纲

    题型 选择填空 名词解释 简答3 4 计算3 4 从二 四章出 第一章 1 无线电波传播方式 天波 地波 3种 依据不同的频率 无线电波在空间的传播有三种基本方式 地球表面波传播 天波传播和空间波传播 1 地球表面波传播 地球表面波 Gro
  • 一线案例:如何提高UGC征集转化率?

    作者 Curry 关注中国互联网出海 专注海外运营推广及本地化运营方法论 关键词 主路径分析 关键环节转化率 工具 友盟 移动统计 U App AI版 2019 友盟杯 数据分析大赛参与奖作品 我们是一款短视频类App 为实现内容冷启动 除
  • 用户切换

    一 切换root登陆 sudo i是Linux终端命令下改变用户对命令使用权限的命令 例如 在Linux命令终端中 开始为 user ubuntu 当使用 该命令后 会出现输入密码的提示 之后输入密码 就会变为 root ubuntu 这样
  • java中的Excel导出

    1 在pom xml文件中添加maven依赖