大概流程分7步

  1.创建工作簿 -->

  2.创建sheet表 -->

  3.创建row行(建议使用循环) -->

  4.用row行逐一创建单元格(建议使用循环) -->

  5.单元格内填充自己的数据并设置样式 -->

  6.其他设置(合并单元格、冻结行列、设置列宽等) -->

  7.输出excel文件 -->

下面开始流程:

  提前准备好依赖:

<!--操作excel-->
<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>

  1.创建工作簿-->

//创建一个工作薄
SXSSFWorkbook workbook = new SXSSFWorkbook();

  2.创建sheet表-->

//创建一个sheet
SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet();
//设置sheet页长度限制,-1则不限制长度
sheet.setRandomAccessWindowSize(-1);

  3.创建row行-->

//创建第1行,从0开始算
Row row0 = sheet.createRow(0);
//创建第2行
Row row1 = sheet.createRow(1);
//创建第3行
Row row2 = sheet.createRow(2);
//创建第4行
Row row3 = sheet.createRow(3);
//以此类推,建议根据List内容使用循环创建

  4.循环创建cell单元格-->

//在刚刚创建的第1行  “row0” 的基础上创建4个单元格并且设置内容,这里手动创建来演示
//实际中使用中应该使用循环来进行创建 Cell cell0 = row0.createCell(0);
cell0.setCellValue("我是单元格的内容1"); Cell cell1 = row0.createCell(1);
cell1.setCellValue("我是单元格的内容2"); Cell cell2 = row0.createCell(2);
cell2.setCellValue("我是单元格的内容3"); Cell cell3 = row0.createCell(3);
cell3.setCellValue("我是单元格的内容4");

  5.写入自己的数据、样式、字体 等设置信息、、、

//表中要几种样式,或几种字体,提前创建好,设置单元格的时候就可以直接拿来用了
//创建样式:
CellStyle cellStyle = workbook.createCellStyle();
//水平居中
cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
//上下居中
cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); //设置字体
Font font1 = workbook.createFont();
font1.setFontName("黑体");
font1.setFontHeightInPoints((short) 16); //字体大小

XSSFFont font2 = wb.createFont();
font2.setFontName(“仿宋_GB2312”);
font2.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//粗体显示
font2.setFontHeightInPoints((short) 12);

//将设置好的字体放入刚创建的样式中
cellStyle.setFont(font1);

//使用样式: 在需要设置的单元格中设置cell.
setCellStyle(里面放刚创建的样式);

  6.合并想合并的单元格、冻结首行等、、、

//合并单元格的方法(根据自己需要,每次合并都需要分别设置四个属性)
//sheet.addMergedRegion(new CellRangeAddress(起始行号, 结束行号, 其实列号, 结束列号));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 4, 5));
//冻结第一行
sheet.createFreezePane(0,1,0,1);
//分别设置列宽,参数1:列号 参数2:宽度值
sheet.setColumnWidth(0,3000);
sheet.setColumnWidth(1,3000);
sheet.setColumnWidth(2,3000);
sheet.setColumnWidth(3,5000);
 

  7.用输出流输出excel文件

//输出文件
//创建文件输出流
FileOutputStream fileOutputStream = new FileOutputStream(new File("E:\\new5\\autoMation\\resource\\test.xlsx"));
//用最开始创建的工作簿.write进行文件写出
workbook.write(fileOutputStream);

下面是完整的简单流程:

准备一个实体类,方便输出:

public class People {
public String name;
public String sex;
public String age;
public String phone; public People() {
} public People(String name, String sex, String age, String phone) {
this.name = name;
this.sex = sex;
this.age = age;
this.phone = phone;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} }

生成excel的代码:

public class OutExcel {

public static void main(String[] args) throws IOException, IllegalAccessException {
ArrayList<People> dataList = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
People people = new People("姓名" + i, i + "", "男", "12345678911");
dataList.add(people);

doExceloneThread(dataList);
}
}

public static void doExceloneThread(ArrayList<People> dataList) throws IllegalAccessException, IOException {
//创建一个工作薄
SXSSFWorkbook workbook = new SXSSFWorkbook();
//创建一个sheet
SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet();
//设置sheet页长度限制
sheet.setRandomAccessWindowSize(-1);

//-------------------------------------------------------
//表中要几种样式,或几种字体,提前创建好,设置单元格的时候就可以直接设置了
//创建样式
CellStyle cellStyle = workbook.createCellStyle();
//水平居中
cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
//上下居中
cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
//设置边框
cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框
cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框
cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框
cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框

//设置字体
Font font = workbook.createFont();
font.setFontName("黑体");
font.setFontHeightInPoints((short) 16); //字体大小
//将字体设置放入样式中
cellStyle.setFont(font);

//创建第一行.后面需要合并某些单元格
Row row0 = sheet.createRow(0);

Cell cell0 = row0.createCell(0);
cell0.setCellValue("哦哦哦");
cell0.setCellStyle(cellStyle);

Cell cell1 = row0.createCell(1);
cell1.setCellValue("");
cell1.setCellStyle(cellStyle);

Cell cell2 = row0.createCell(2);
cell2.setCellValue("哈哈哈");
cell2.setCellStyle(cellStyle);

Cell cell3 = row0.createCell(3);
cell3.setCellValue("哈哈哈");
cell3.setCellStyle(cellStyle);

//-------------------------------------------

//遍历集合中的数据
//也可以采用自己的方法,总之就是将数据放到一个一个的cell(单元格)中,
Iterator<People> iterator = dataList.iterator();
//反射
Field[] fields = People.class.getDeclaredFields();
Integer currentRow = 1;

CellStyle cellStyle2 = workbook.createCellStyle();
//上下左右居中
cellStyle2.setAlignment(XSSFCellStyle.ALIGN_CENTER);
cellStyle2.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
cellStyle2.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框
cellStyle2.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框
cellStyle2.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框
cellStyle2.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框

while (iterator.hasNext()) {
People people = iterator.next();
Row row = sheet.createRow(currentRow);
for (int i = 0; i < fields.length; i++) {
Cell cell = row.createCell(i);

if (currentRow == 1){
cell.setCellValue(fields[i].getName());
}else{
cell.setCellValue(String.valueOf(fields[i].get(people)));
}
cell.setCellStyle(cellStyle2);

}
currentRow++;
}

//合并单元格的方法
//sheet.addMergedRegion(new CellRangeAddress(起始行号, 结束行号, 其实列号, 结束列号));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 1));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 2, 3));
//冻结第一行
sheet.createFreezePane(0,1,0,1);
//设置列宽,参数1:列号 参数2:宽度值
sheet.setColumnWidth(0,3000);
sheet.setColumnWidth(1,3000);
sheet.setColumnWidth(2,3000);
sheet.setColumnWidth(3,5000);

//输出文件
FileOutputStream fileOutputStream = new FileOutputStream(new File("E:\\new5\\autoMation\\resource\\test.xlsx"));
workbook.write(fileOutputStream);
}
}

java中使用 POI导出excel表格的简单实现的更多相关文章

  1. java中使用poi导出excel表格数据并且可以手动修改导出路径

    在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下

  2. java中使用jxl导出Excel表格详细通用步骤

    该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入s ...

  3. Java中导入、导出Excel

    原文:Java中导入.导出Excel 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已 ...

  4. 我是陌生人 Java中导入、导出Excel

    我是陌生人 Java中导入.导出Excel 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是: ...

  5. [转]Java中导入、导出Excel

    原文地址:http://blog.csdn.net/jerehedu/article/details/45195359 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样 ...

  6. Java代码导入导出 Excel 表格最简单的方法

    import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStrea ...

  7. 使用poi导出Excel表格,jar包冲突

    HTTP Status 500 – Internal Server Error Type Exception Report Message Handler processing failed; nes ...

  8. 复杂的POI导出Excel表格(多行表头、合并单元格)

    poi导出excel有两种方式: 第一种:从无到有的创建整个excel,通过HSSFWorkbook,HSSFSheet HSSFCell, 等对象一步一步的创建出工作簿,sheet,和单元格,并添加 ...

  9. struts2中利用POI导出Excel文档并下载

    1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...

随机推荐

  1. redis-server.exe双击闪退

    转自 https://blog.csdn.net/qq_40361770/article/details/80454248 解决方法: 1-win+R 打开命令行 2-cd至redis目录,例如 D: ...

  2. 开发工具-SVG占位图片

    更新日志 2022年6月10日 初始化链接. https://toolb.cn/imageholder

  3. 百度地图API 地图圈区域并计算坐标点是否在区域内

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. .NetCore实现图片缩放与裁剪 - 基于ImageSharp

    前言 (突然发现断更有段时间了 最近在做博客的时候,需要实现一个类似Lorempixel.LoremPicsum这样的随机图片功能,图片有了,还需要一个根据输入的宽度高度获取图片的功能,由于之前处理图 ...

  5. 高通sensor理解

    .1.高通为什么引入adsp? 2.adsp sensor 是如何工作起来的? 3.adsp 和ap 是如何通信的? 4.adsp 架构组成 解答: 1.高通在msm8960之前sensor 是挂在p ...

  6. 什么是AR技术?AR的价值究竟有多大?

    什么是AR技术? AR技术,解释来说就是增强现实(Augmented Reality),是一种实时地计算摄影机影像的位置及角度并加上相应图像.3D模型的技术,它的目标是把虚拟世界嵌套进真实世界进行互动 ...

  7. JavaScript与Node.js一起打造一款聊天App

    聊天是我们人与人交流最直接的方式,互联网的加入使我们交流更加便捷.我们手机上的微信.QQ是我们手机必不可少的应用软件.那么,我们是否可以做一款聊天应用呢? 之前我自己闲着没事,研究过一些技术,做了一款 ...

  8. Java实用类(五) -Math类和指定范围的随机数

    1.Math类 java.lang.Math类提供了常用的数学运算方法和两个静态常量E(自然对数的底数) 和PI(圆周率) // 绝对值 System.out.println(Math.abs(-3. ...

  9. Unity-A-Star寻路算法

    最短路径 将地图存成二维数组,通过行列查找: 每一步都查找周围四个方向,或者八方向的所有点,放入开表: 是否边缘 是否障碍 是否已经在确定的路线中 计算每个方向上路径消耗,一般斜着走消耗小,收益大: ...

  10. 20行python代码,轻松获取各路小说,非常简单

    哔哔两句 作为现代青年,我相信应该没几个没看过小说的吧,嘿嘿~ 一般来说咱们书荒的时候怎么办?自然是去起某点排行榜先找到小说名字,然后再找度娘一搜,哎 ,笔趣阁就出来答案了,美滋滋~但是那多麻烦,咱们 ...