当前位置: 首页 > news >正文

Java:表单生成excel文档 poi 通用

在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题:

1. 生成 Excel 文档.
2. 自动对生成的Excel 文档第一行标题栏设置成filter 过滤形式, 方便用户使用.

导入依赖: 

<!--依赖的jar包-->
<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>

 Excel转换通用类:

package com.kingbal.king.dmp;import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;/*** <b>Function: </b> todo** @program: ExcelUtil* @Package: com.kingbal.king.dmp* @author: dingcho* @date: 2023/12/30* @version: 1.0* @Copyright: 2023 www.kingbal.com Inc. All rights reserved.*/
public class ExcelUtil<T> {public HSSFCellStyle getCellStyle(HSSFWorkbook workbook, boolean isHeader) {HSSFCellStyle style = workbook.createCellStyle();style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);style.setLocked(true);if (isHeader) {style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);HSSFFont font = workbook.createFont();font.setColor(HSSFColor.BLACK.index);font.setFontHeightInPoints((short) 12);font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);style.setFont(font);}return style;}public void generateHeader(HSSFWorkbook workbook, HSSFSheet sheet, String[] headerColumns) {HSSFCellStyle style = getCellStyle(workbook, true);Row row = sheet.createRow(0);row.setHeightInPoints(30);for (int i = 0; i < headerColumns.length; i++) {Cell cell = row.createCell(i);String[] column = headerColumns[i].split("_#_");sheet.setColumnWidth(i, Integer.valueOf(column[1]));cell.setCellValue(column[0]);cell.setCellStyle(style);}}@SuppressWarnings({"rawtypes", "unchecked"})public HSSFSheet creatAuditSheet(HSSFWorkbook workbook, String sheetName,List<T> dataset, String[] headerColumns, String[] fieldColumns)throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {HSSFSheet sheet = workbook.createSheet(sheetName);sheet.protectSheet("");generateHeader(workbook, sheet, headerColumns);HSSFCellStyle style = getCellStyle(workbook, false);SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");int rowNum = 0;for (T t : dataset) {rowNum++;Row row = sheet.createRow(rowNum);row.setHeightInPoints(25);for (int i = 0; i < fieldColumns.length; i++) {String fieldName = fieldColumns[i];String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);try {Class clazz = t.getClass();Method getMethod;getMethod = clazz.getMethod(getMethodName, new Class[]{});Object value = getMethod.invoke(t, new Object[]{});String cellValue = "";// 对于某些特定类型进行转换if (value instanceof Date) {Date date = (Date) value;cellValue = sd.format(date);} else {cellValue = null != value ? value.toString() : "";}Cell cell = row.createCell(i);cell.setCellStyle(style);cell.setCellValue(cellValue);} catch (Exception e) {}}}return sheet;}}

根据需求调用:

public static void main(String[] args) {Map<String, Object> param = Maps.newHashMap();param.put( "callType", "CALL_IN" );// 获取您对应查询的字段List<Cdr> cdrList = cdrService.queryListByParam(param);String [] cdrInColumns = new String[]{"呼入时间_#_3000" ,"挂断时间_#_3000" ,"座席工号_#_3000" ,"座席姓名_#_3000" ,"呼入时长(秒)_#_3000" ,"IVR时长(秒)_#_3000" ,"排队时长(秒)_#_3000" ,"通话时长(秒)_#_3000" ,"归属地_#_3000" ,"满意度调查_#_3000"};String [] cdrInFields = new String []{"callTime","hangupTime" ,"src" ,"workNo" ,"trueName" ,"totalLength" ,"ivrLength" ,"queueLength","datlLength" ,"city" ,"ivrKey"};HSSFWorkbook workbook = new HSSFWorkbook();ExcelUtil<Cdr> cdrSheet = new ExcelUtil<Cdr>();cdrSheet.creatAuditSheet(workbook, "呼出信息" , cdrList, cdrInColumns, cdrInFields);ByteArrayOutputStream os = new ByteArrayOutputStream();workbook.write(os);InputStream inputStream = new ByteArrayInputStream(os.toByteArray());// 获取文件长度 inputStream.available()}
}

相关文章:

Java:表单生成excel文档 poi 通用

在用java 写数据库应用的时候, 通常会生成各种报表&#xff0c;而这些报表可能会被导出为各种格式的文件&#xff0c;比如Excel文档&#xff0c;pdf 文档等等. 今天先做了一个生成Excel 文档的例子&#xff0c;主要解决以下问题&#xff1a; 1. 生成 Excel 文档. 2. 自动对生成…...

使用Apache Commons SCXML实现状态机管理

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们程序员在开发过程中&#xff0c;经常会遇到需要管理不同状态和状态之间转换的场景。比如&#xff0c;一个在线购物的订单&#xff0c;它可能有“新建订单”、“已支付”、“配送中”、“已完成”等状态。在这…...

大数据技术原理与应用期末考试题

大数据技术原理与应用期末考试题 一、单选题 1.下面哪个选项属于大数据技术的“数据存储和管理”技术层面的功能? A、利用分布式文件系统、数据仓库、关系数据库等实现对结构化、半结构化和非结构化海量数据的存储和管理 B、利用分布式并行编程模型和计算框架,结合机器学习…...

解决jenkins的Exec command命令不生效,或者执行停不下来的问题

Jenkins构建完后将war包通过 Publish Over SSH 的插件发布到服务器上&#xff0c;在服务器上执行脚本时&#xff0c;脚本中的 nohup 命令无法执行&#xff0c;并不生效&#xff0c;我配置的Exec command命令是后台启动一个war包&#xff0c;并输出日志文件。 nohup java -jar /…...

【PHP】json_decode的第二个参数是什么意思

json_decode() 函数的第二个参数 $associative 是一个布尔值&#xff0c;用于控制 JSON 对象在 PHP 中的解码方式。当将其设置为 true 时&#xff0c;JSON 对象将被解码为关联数组&#xff1b;当设置为 false 时&#xff0c;JSON 对象将被解码为 stdClass 对象。默认值为 false…...

学生公寓安全用电管理系统应用案例

摘要&#xff1a;安全用电是学校公寓用电管理的首要任务&#xff0c;这就需要对一些恶性负载进行识别和控制&#xff0c;同时为了减少电工和后期管理人员的成本&#xff0c;引进了安全用电管理系统。本文在在描述了安全用电管理系统的工作原理和利用智能电表可实现的功能后,阐明…...

python实现简易的flask后端接口

先安装插件pip install flask 新建py脚本文件编码&#xff1a; # -*- coding: utf-8 -*- from flask import Flask from flask_cors import CORS # 跨域依赖&#xff0c;通过pip install flask-cors安装app Flask(__name__) cors CORS(app) # 跨域设置&#xff0c;这样设置…...

CSDN质量分批量查询

单个文章质量分查询地址&#xff08;点击右边地址&#xff09;&#xff1a; CSDN质量分查询 创作者身份认证审核标准 优质创作者申请条件&#xff1a; 粉丝数在5000以上近30日&#xff08;申请日算起&#xff09;原创文章数不少于4篇原创博文总数不少于100篇垂直领域原创数量…...

【MPC学习笔记】01:MPC简介(Lecture 1_1 Unconstrained MPC)

本笔记来自北航诸兵老师的课程 课程地址&#xff1a;模型预测控制&#xff08;2022春&#xff09;lecture 1-1 Unconstrained MPC 文章目录 0 MPC 简介0.1 案例引入0.2 系统模型0.3 MPC的优点0.4 MPC的缺点0.5 MPC的未来 1 详细介绍 0 MPC 简介 0.1 案例引入 MPC&#xff08;…...

c语言结构体学习上篇

文章目录 前言一、结构体的声明1&#xff0c;什么叫结构体?2&#xff0c;结构体的类型3,结构体变量的创建和初始化4&#xff0c;结构体的类型5&#xff0c;结构体的初始化 二、结构体的访问1&#xff0c;结构体成员的点操作符访问2&#xff0c;结构体体成员的指针访问 前言 昨…...

Linux: eBPF: bcc-tools:tcpdrop使用需要注意的问题

最近使用bcc-tools的时候注意到,bcc-tools(eBPF相关软件)的使用版本和内核的版本紧密程度非常高。因为要使用内核的函数或者结构体,所以就必须版本一致是必须的,不然会出现下面的警告或者错误: WARNING: tcp_drop() kernel function not found or traceable. The kernel …...

AI:113-基于卷积神经网络的图像风格迁移

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…...

15、Kubernetes核心技术 - 探针

目录 一、概述 二、探针类型 2.1、就绪探针&#xff08;Readiness Probe&#xff09; 2.2、存活探针&#xff08;Liveness Probe&#xff09; 三、探针探测方法 3.1、exec 3.2、httpGet 3.3、tcpSocket 四、探针配置项 五、探针使用 5.1、就绪探针&#xff08;Readin…...

GTK4 环境配置

1 安装gtk4包裹: # sudo yum install gtk4 gtk4-devel gtk4-devel-docs devhelp glib2 glib2-devel glib2-doc 2 安装 glade 4 git clone https://github.com/ag-python/cambalache.git 记住 把软件目录 复制到 一个你不会移动删除的地方(千万别删除这个软件文件夹 因为运行…...

Yolov8部署——segmentation部署以及批量推理

Yolov8部署——segmentation部署以及批量推理 参考:在windows上部署Yolov8主要参考下面两个仓库&#xff0c;https://github.com/xunzixunzi/tensorrt-cpp-api和https://github.com/xunzixunzi/YOLOv8-TensorRT-CPP&#xff0c;代码说是适合批量处理&#xff0c;但是代码中是以…...

再见2023,你好2024!

大家好&#xff0c;我是老三&#xff0c;本来今天晚上打算出去转一转&#xff0c;陆家嘴打车实在太艰难了&#xff0c;一公里多的路&#xff0c;司机走了四十分钟&#xff0c;还没到&#xff0c;再加上身体不适&#xff0c;咳嗽地比较厉害&#xff0c;所以还是宅在酒店里&#…...

【计算机毕业设计】SSM二手交易网站

项目介绍 该项目分为前后台&#xff0c;前台普通用户角色&#xff0c;后台管理员角色。 管理员主要功能如下&#xff1a; 登陆,商品分类管理,商品管理,商品订单管理,用户管理等功能。 用户角色主要功能如下&#xff1a; 包含以下功能&#xff1a;查看所有商品,用户登陆注册…...

纠删码ReedSolomon

随着大数据技术的发展&#xff0c;HDFS作为Hadoop的核心模块之一得到了广泛的应用。为了数据的可靠性&#xff0c;HDFS通过多副本机制来保证。在HDFS中的每一份数据都有两个副本&#xff0c;1TB的原始数据需要占用3TB的磁盘空间&#xff0c;存储利用率只有1/3。而且系统中大部分…...

C++音视频开发技巧汇总(持续更新)

1.录制PCM数据 有时候我们需要录制PCM数据到文件以测试录制数据是否正确&#xff0c;一般可以使用以下代码实现&#xff1a; FILE *pf; fopen_s(&pf, "rec.pcm", "wb"); fwrite(myPcmArr, 1, outBufferLen, pf); 录制pcm文件后可以使用Audacity来导…...

4462 4.曙曙献爱心

#include<bits/stdc.h> using namespace std; int n,m,k; int a[1001]; int s[1001]; int f[1001][1001];//f[i][j]&#xff0c;i个警察&#xff0c;j个点&#xff0c;能管理的最大人数 int main(){cin>>n>>m>>k;for(int i1;i<n;i){cin>>a[i…...

浅谈命令模式

命令模式是一种行为设计模式&#xff0c;用于将一个请求封装成一个对象&#xff0c;从而使得请求的发送者和接收者解耦&#xff0c;并支持对请求进行参数化、队列化、撤销和重做等操作。 在命令模式中&#xff0c;有一下介个关键角色&#xff1a; Command&#xff08;命令&am…...

软件测试/测试开发丨Python 模块与包

python 模块与包 python 模块 项目目录结构 组成 package包module模块function方法 模块定义 定义 包含python定义和语句的文件.py文件作为脚本运行 导入模块 import 模块名from <模块名> import <方法 | 变量 | 类>from <模块名> import * 注意&a…...

java企业网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web企业网站系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…...

MAC电脑安装java开发工具

一、安装brew 1.1、官网地址 链接 1.2、更新地址 二、安装 java brew install openjdk11 三、安装gradle Gradle安装与配置教程 - 知乎 四、GIT 4.1、GIT安装 brew install git 4.2、rsa ssh-keygen -t rsa -C "jhestarbucks.com" 五、自动搭建一个springBoot…...

高压继电器,未来几年市场将保持稳定增长

高压继电器是一种用于控制大功率电气设备的开关装置&#xff0c;广泛应用于电力系统、轨道交通、工业自动化等领域。随着各行业对电气控制需求的不断增加&#xff0c;高压继电器市场也在不断扩大。全球高压继电器市场分析&#xff1a; 在全球市场中&#xff0c;目前主要的高压继…...

在Go语言中实现HTTP请求的缓存

大家好&#xff0c;我是你们可爱的编程小助手&#xff0c;今天我们要一起探讨如何使用Go语言实现HTTP请求的缓存。听起来是不是很酷&#xff1f;让我们开始吧&#xff01; 首先&#xff0c;我们要明白什么是缓存。简单来说&#xff0c;缓存就是将数据存储在内存中&#xff0c;…...

技术扫盲:如何优雅的使用 java -jar

java -jar xxx.jar java -jar 是一个用于在命令行界面中执行 Java 可执行 JAR 文件的命令。它的语法如下&#xff1a; java -jar <JAR 文件路径> [参数]其中&#xff1a; java 是 Java 运行时环境的可执行文件。-jar 是一个选项&#xff0c;表示要执行的文件是一个 JA…...

『番外篇七』SwiftUI 获取视图全局位置在 NavigationStack 中失效的解决方法

概览 在 番外篇六』SwiftUI 取得任意视图全局位置的三种方法 这篇博文里,我们详细讨论了在 SwiftUI 中获取任意视图全局坐标的几种方法。 不过,我们也从中提到了某些方法无法适用于 NavigationStack 视图,本篇博文由此应运而生。 在本篇博文种,您将学到如下内容: 概览1.…...

GBASE南大通用 GCDW阿里云计算巢:自动化部署云原生数据仓库

目前&#xff0c;GBASE南大通用已与阿里云计算巢合作&#xff0c;双方融合各自技术优势&#xff0c;助力企业用户实现云上数据仓库的自动化部署&#xff0c;让用户在云端获取数据仓库服务“更简单”&#xff0c;让用户在云端使用数据仓库服务“更便捷”&#xff0c;满足企业用户…...

Docker实战02|Namespace

在上一文《Docker实战01&#xff5c;容器与开发语言》中主要介绍了Docker的基本概念与Docker安装、Go语言安装等实战技巧。 本文继续针对Namespace技术展开讲解并利用Go语言进行实践。 本系列所有代码均已经开源。关公众号回复「Go语言实现Docker」即可获得。 目录 2.1.2 U…...

企业搭建pc端网站/简单网站建设优化推广

感谢Sunny秋刀鱼。https://www.cnblogs.com/527289276qq/p/5595798.html 在页面或者窗口Unloaded事件中关闭串口即可。转载于:https://www.cnblogs.com/dotnetHui/p/8513592.html...

徐州网站建设公司/关键词搜索工具app

springboot 默认 只支持模板引擎。 有时候我们可能需要引入 jsp&#xff0c;那么就得整合jsp了。 1.pom里面添加&#xff1a; <dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId></dependency><!-- jasper …...

江桥网站建设/网站排名前十

虽然去年就自学过Java&#xff0c;也写过Android。但是最近又爆出很多问题&#xff0c;很多细节问题&#xff0c;很多基础问题。这让我再次意识到基础的重要性。问题一&#xff1a;子类何时调用父类的构造方法如果你之前问我&#xff0c;我肯定会说&#xff0c;super的时候。。…...

山西建设执业注册中心网站/深圳网络营销推广

页面布局中常用的清除浮动的方法 我们在页面布局时&#xff0c;基本上都避免不了使用float&#xff0c;但由此也会引发一些问题&#xff0c;尤其是在容器高度不固定时&#xff0c;此时它的高度完全是由内部的元素撑开的。如果内部元素还是浮动的&#xff0c;那么由于内部的元素…...

秦淮网站建设/提高百度快速排名

01-求一个整数存储在内存中的二进制中1的个数 法一&#xff1a;循环遍历 问题引入以在十进制中&#xff0c;求某一个数字n中的某个数字m的数量&#xff0c;来引入二进制中求1的个数。 要求一个十进制数n中某一位数字m的个数&#xff0c;只需要让n对10取模与m比较、再让n n /…...

网站建设的构思/推广软文范例大全500

一提到iPhone很自然而然的就会想到流畅&#xff0c;顺滑如斯&#xff0c;虽然近几年安卓手机也不卡&#xff0c;但是和iOS的流畅还是有很大差别的&#xff0c;说道这里使用安卓的小伙伴肯定会说&#xff0c;安卓现在比iOS都要流畅&#xff0c;安卓早已不是原来的安卓。但是我想…...