当前位置: 首页 > 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…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...