首页 > 编程语言 >Java实现数据导出到excel文件

Java实现数据导出到excel文件

时间:2023-08-26 20:56:03浏览次数:45  
标签:Java wb fos 导出 excel createCell new setCellValue row

使用的依赖:Apache提供的poi包

首先导入依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.2</version>
 </dependency>

 核心实现

//创建一个工作簿,也就是Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
//创建一个工作表
HSSFSheet sheet = wb.createSheet();
//创建一行
HSSFRow row = sheet.createRow(0);
//创建这一行的第一个单元格
HSSFCell cell = row.createCell(0);
//设置单元格的内容
cell.setCellValue("你好!");
//输出文件
//创建字节输出流
File file = new File("D://excel.xls");
FileOutputStream fos = new FileOutputStream(file);
wb.write(fos);
fos.flush();
fos.close();

 这个工作表指的是这个

运行结果

 

现在你完成了往一个单元格里写数据,如果想要做成一个表格,那就需要循环

例如现在有一个需求:现在要统计学生的签到情况,需要把学生的签到记录导出到Excel表中

这里我们用假数据模拟,首先是实体类

public class CheckExcel {
    private String name;//姓名
    private Integer number;//学号
    private Date checkTime;//签到时间
}

主体程序

public class ToExcel {
    static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static void getExcel(List<CheckExcel> object) {
        //创建一个工作簿,也就是Excel文件
        HSSFWorkbook wb = new HSSFWorkbook();
        //创建一个工作表
        HSSFSheet sheet = wb.createSheet();
        //第一行,标题
        HSSFRow row0 = sheet.createRow(0);
        HSSFCell cell0 = row0.createCell(0);
        cell0.setCellValue(object.get(0).getCheckName() + "签到统计表");
        //第二行,表头
        HSSFRow row1 = sheet.createRow(1);
        row1.setRowStyle(style);
        row1.createCell(0).setCellValue("姓名");
        row1.createCell(1).setCellValue("学号");
        row1.createCell(2).setCellValue("签到时间");
        //表中数据
        int rowInt = 2;
        for (CheckExcel obj : object) {
            HSSFRow row = sheet.createRow(rowInt++);
            int cellInt = 0;
            row.createCell(cellInt++).setCellValue(obj.getName());
            row.createCell(cellInt++).setCellValue(obj.getNumber());
            row.createCell(cellInt).setCellValue(sdf.format(obj.getCheckTime()));//将日期转换成字符串,要不然存的是一个时间戳
        }
        try {
            //输出文件
            //创建字节输出流
            File file = new File("D://excel.xls");
            FileOutputStream fos = new FileOutputStream(file);
            wb.write(fos);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("ToExcel.getExcel");
            System.out.println("IO出异常了");
        }
    }
    public static void main(String[] args) {
        List<CheckExcel> stu = new ArrayList<>();
        stu.add(new CheckExcel("学生1", 1001, "高等数学", new Date()));
        stu.add(new CheckExcel("学生2", 1002, "高等数学", new Date()));
        stu.add(new CheckExcel("学生3", 1003, "高等数学", new Date()));
        getExcel(stu);
    }  
}

 运行结果

但是细心的你会发现这个表格没有居中,看起来样式很不好看,这就需要用到HSSFCellStyle设置表格的样式,具体样式设置有很多就不给大家一一演示了,这里放一个链接供大家去参考

https://poi.apache.org/apidocs/dev/org/apache/poi/hssf/usermodel/HSSFCellStyle.html

这是官方提供的API,所有方法都在里面。

标签:Java,wb,fos,导出,excel,createCell,new,setCellValue,row
From: https://www.cnblogs.com/wanghycoder/p/17659422.html

相关文章

  • 一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问
    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明。问题现象7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值85%),而我们是按容器内存60%(9.6G)的比例配置的JVM堆内存。看了下其它服务,同样的堆内存配置,它们内存占用约70%~79%,......
  • JavaScript中实现类与类继承
    new操作符调用的作用如果一个函数被使用new操作符调用了,那么它会执行如下操作:1.在内存中创建一个新的对象(空对象);2.这个对象内部的[[prototype]]属性会被赋值为该构造函数的prototype属性;(后面详细讲);3.构造函数内部的this,会指向创建出来的新对象;4·执行函数的内部代码(函数体代码);5·......
  • 初识JavaScript
    1995年,JavaScript问世。当时,它的主要用途是代替Perl等服务器端语言处理输入验证。在此之前,要验证某个必填字段是否已填写,或者某个输入的值是否有效,需要与服务器的一次往返通信。网景公司希望通过在其Navigator浏览器中加入JavaScript来改变这个局面。在那个普遍通过电话......
  • javascript学习日记day6
    前两天跑去学公司的框架和游戏脚本去了,果然我就是属于三天打鱼两天晒网的那种,下面是今天的笔记对象的增删改查letgood={goods:'小米',name:'小米10青春版',num:100012816024,weight:'0.55kg',address:'中国大陆'}增:good.pric......
  • 用 PHP 和 JavaScript 显示地球卫星照片
    向日葵8号气象卫星是日本宇宙航空研究开发机构设计制造的向日葵系列卫星之一,重约3500公斤,设计寿命15年以上。该卫星于2014年10月7日由H2A火箭搭载发射成功,主要用于监测暴雨云团、台风动向以及持续喷发活动的火山等防灾领域。——百度百科日本发射这颗卫星后,不仅......
  • 说出 Java 中的 7 种重试机制
    随着互联网的发展项目中的业务功能越来越复杂,有一些基础服务我们不可避免的会去调用一些第三方的接口或者公司内其他项目中提供的服务,但是远程服务的健壮性和网络稳定性都是不可控因素。在测试阶段可能没有什么异常情况,但上线后可能会出现调用的接口因为内部错误或者网络波动而出错......
  • 学习笔记 - Java 面向对象_下
    static关键字如果想让一个成员变量被类的所有实例所共享,就用static修饰即可,称为类变量(或类属性)可修饰结构:属性、方法、代码块、内部类对比静态变量和实例变量个数静态变量:只有一份,被多个对象共享;实例变量:每一个对象都保存着一份实例变量;内存位置静态变量:存放在堆......
  • JAVA 集合
    Java集合体系Java集合框架图Java集合主要分为两大类:实现了Collection接口的单列集合:实现了Map接口的双列集合:集合框架体系序号接口描述1Collection接口Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素,Java不提供直接继......
  • Java日志框架的依赖设置备查(SLF4J, Log4j, Logback)
    前言最近在看代码的过程中,发现身边的许多人在使用Java日志框架时,对于应该引入何种依赖不甚了解,搜索网络上的文章,常常也是互不一致。这篇文章可以看着是Java日志框架的入门使用和实践建议,重点介绍不同组合方式下的依赖设置及其背后的逻辑,一方面给自己备查,另外也希望对小伙伴们......
  • 一口气看完java并发编程
    JUC进程与线程进程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程......