熊熊出没 发表于 2023-9-1 16:16:31

Java实现数据导出到excel文件

使用的依赖: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(); 这个工作表指的是这个
https://img2023.cnblogs.com/blog/3139790/202308/3139790-20230826182707408-1549033699.png
运行结果
 https://img2023.cnblogs.com/blog/3139790/202308/3139790-20230826201447851-1976773591.png
现在你完成了往一个单元格里写数据,如果想要做成一个表格,那就需要循环
例如现在有一个需求:现在要统计学生的签到情况,需要把学生的签到记录导出到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);
    }
} 运行结果
https://img2023.cnblogs.com/blog/3139790/202308/3139790-20230826203426061-79140946.png
但是细心的你会发现这个表格没有居中,看起来样式很不好看,这就需要用到HSSFCellStyle设置表格的样式,具体样式设置有很多就不给大家一一演示了,这里放一个链接供大家去参考
https://poi.apache.org/apidocs/dev/org/apache/poi/hssf/usermodel/HSSFCellStyle.html
这是官方提供的API,所有方法都在里面。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Java实现数据导出到excel文件