java中使用 POI导出excel表格的简单实现
大概流程分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表格的简单实现的更多相关文章
- java中使用poi导出excel表格数据并且可以手动修改导出路径
		在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下 
- java中使用jxl导出Excel表格详细通用步骤
		该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入s ... 
- Java中导入、导出Excel
		原文:Java中导入.导出Excel 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已 ... 
- 我是陌生人 Java中导入、导出Excel
		我是陌生人 Java中导入.导出Excel 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是: ... 
- [转]Java中导入、导出Excel
		原文地址:http://blog.csdn.net/jerehedu/article/details/45195359 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样 ... 
- Java代码导入导出 Excel 表格最简单的方法
		import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStrea ... 
- 使用poi导出Excel表格,jar包冲突
		HTTP Status 500 – Internal Server Error Type Exception Report Message Handler processing failed; nes ... 
- 复杂的POI导出Excel表格(多行表头、合并单元格)
		poi导出excel有两种方式: 第一种:从无到有的创建整个excel,通过HSSFWorkbook,HSSFSheet HSSFCell, 等对象一步一步的创建出工作簿,sheet,和单元格,并添加 ... 
- struts2中利用POI导出Excel文档并下载
		1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ... 
随机推荐
- 解决跨海高并发崩溃难题?so easy
			近年来随着互联网强势的发展浪潮,越来越多的企业选择跨境出海,扩展海外市场.而想要在一个陌生市场最快速地吸引到用户,一定不能缺少的就是丰富多样的各类活动.然而活动在带来大流量的同时,也带来了一些问题,比 ... 
- 在C#中使用正则表达式最简单的方式
			更新记录 本文迁移自Panda666原博客,原发布时间:2021年5月11日. 在.NET中使用正则表达式与其他语言并无太大差异.最简单的使用就是使用Regex类型自带的静态方法. 注意:在.NET中 ... 
- go程序添加远程调用tcpdump功能
			最近开发的telemetry采集系统上线了.听起来高大上,简单来说就是一个grpc/udp服务端,用户的机器(路由器.交换机)将它们的各种统计数据上报采集.整理后交后端的各类AI分析系统分析.目前华为 ... 
- Nodejs实现图片的上传、压缩预览、定时删除
			前言 我们程序员日常都会用到图片压缩,面对这么常用的功能,肯定要尝试实现一番.第一步,node基本配置 这里我们用到的是koa框架,它可是继express框架之后又一个更富有表现力.更健壮的web框架 ... 
- C#中的 Attribute 与 Python/TypeScript 中的装饰器是同个东西吗
			前言 最近成功把「前端带师」带入C#的坑(实际是前端带师开始从cocos转unity游戏开发了) 某天,「前端带师」看到这段代码后问了个问题:[这个是装饰器]? [HttpGet] public Re ... 
- OpenSSF安全计划:SBOM将驱动软件供应链安全
			在 软件成分分析(SCA)一文中,我们简单提到软件物料清单(SBOM)在安全实践中的价值. 本期文章将带你深入了解 "SBOM 无处不在"计划是什么,以及 SBOM 对未来软件供应 ... 
- 【Java面试】什么是 ISR,为什么需要引入 ISR
			Hi,大家好,我是Mic. 一个工作5年的粉丝,在简历上写精通Kafka. 结果在面试的时候直接打脸. 面试官问他:"什么是ISR,为什么需要设计ISR" 然后他一脸懵逼的看着面试 ... 
- Golang并发编程——goroutine、channel、sync
			并发与并行 并发和并行是有区别的,并发不等于并行. 并发 两个或多个事件在同一时间不同时间间隔发生.对应在Go中,就是指多个 goroutine 在单个CPU上的交替运行. 并行 两个或者多个事件在同 ... 
- NC16564 [NOIP2012]借教室
			NC16564 [NOIP2012]借教室 题目 题目描述  在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借 ... 
- VS code 远程连接服务器步骤
			①安装VS code,并连接远程服务器(本地也需要有ssh).参考 ②免密钥登录设置,参考 具体步骤:WIN+R -->cmd, 输入ssh-keygen,然后一直Enter,最终生成公钥和私钥 ... 
