java代码生成excel表格

在很多项目中,都需要我们把数据库查询出来的数据导出成excel表格,导出就算了,还给我弄个模板,大标题要写在合并表格里还要居中,标题要有底色,还要加粗,等等,下面我就来讲一下我用到的表格操作:

首先要进行表格操作,要添加相关依赖

这里我重点说明一下,我用4.3及以上版本就不行,可能是方法有升级

java 复制代码
<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.0.1</version>
        </dependency>

创建excel文件

如果想生成.xls文件:

java 复制代码
Workbook workbook = new HSSFWorkbook();

如果想生成.xlsx文件

java 复制代码
Workbook workbook = new XSSFWorkbook();

创建工作簿

也就是我们说的Sheet页,sheet页是根据Workbook对象生成的,也就是sheet页依赖excel文件而存在。

java 复制代码
Sheet sheet = workbook.createSheet("Sheet1");  // Sheet1为要生成的sheet页的名称

写入操作

完成以上操作,在不考虑样式的前提下,我们就可以写数据了。写数据的话是按行进行写入的。
首先声明行变量

行是根据sheet声明的,参数为该行的位置(从0开始算)

java 复制代码
Row titleRow = sheet.createRow(0);

写入数据

有了行对象,那么我们就可以对该行的某列进行操作了

首先要创建该行某列对象,然后用getCell方法获取单元格,参数为单元格索引位置(从0开始算),然后用setCellValue方法进行内容写入,参数为内容

java 复制代码
titleRow.createCell(0);
titleRow.getCell(0).setCellValue("序号");

写完之后,返回workbook对象就可以了。

按这样操作,一份没有样式的表格文件就生成好了。

样式操作

首先要声明样式对象

因为创建的workbook对象方式不同,样式对象的类型也不一样,不过方法是类似的

java 复制代码
XSSFCellStyle cellStyle = workbook.createCellStyle();

背景颜色

这里修改只需要改new java.awt.Color里的参数值即可,也支持输入0xff000000(默认值)16进制数

需要与设置填充格式一起使用才生效,使用无先后顺序

java 复制代码
cellStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(89, 214, 255),new DefaultIndexedColorMap()));

字体居中

java 复制代码
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);  // 垂直居中
cellStyle.setAlignment(HorizontalAlignment.CENTER); // 水平居中

设置边框

BorderStyle.THIN为宽度属性

java 复制代码
cellStyle.setBorderBottom(BorderStyle.THIN); // 下边框
cellStyle.setBorderRight(BorderStyle.THIN);  // 右边框
cellStyle.setBorderLeft(BorderStyle.THIN);   // 左边框
cellStyle.setBorderTop(BorderStyle.THIN);    // 上边框

设置填充格式

java 复制代码
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

自动换行

java 复制代码
cellStyle.setWrapText(true);

字体设置

java 复制代码
Font titleFont = workbook.createFont();  // 声明字体对象
titleFont.setBold(true);        // 字体加粗
titleFont.setFontName("华文彩云");  // 字体类型
titleFont.setFontHeightInPoints((short) 20);  // 字体大小
cellStyle.setFont(titleFont);   // 赋值样式对象

设置列宽

java 复制代码
sheet.setColumnWidth(0, 4200);  // 第0列列宽设置为4200

合并单元格

java 复制代码
sheet.addMergedRegion(new CellRangeAddress(1, 3, 1, 3));  // 参数分别为起始行,结束行,起始列,结束列

我这边用到的基本是这些,如果有其他的操作可以评论我或者私信我,我这边在做补充

相关推荐
独泪了无痕8 小时前
探索Pinyin4j-Java中的拼音转换利器
java·后端
ailitsoft8 小时前
库存管理系统如何记录跨门店调拨后的收货差异?
excel·零售·软件需求
道尔柯南9 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
来让爷抱一个10 小时前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
kingx310 小时前
Bugku 3122 谷歌小恐龙题解:纯离线逆向 Vault 的 AES-GCM 加密资源(附 Python 解密器)
java·逆向·ctf·bugku·aes-gcm
DevOpenClub12 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
心祭丫丫12 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
露天赏雪13 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
天天被压力13 小时前
【A股分钟级高频数据完全手册 #06】北交所分钟级数据接口:京市股票Pro版最新分时
java·人工智能·python
天天被压力13 小时前
【A股分钟级高频数据完全手册 #05】指数历史分钟数据接口:Pro版沪深指数分时回放
java·人工智能·python