Java实现数据导出到excel文件

打印 上一主题 下一主题

主题 556|帖子 556|积分 1668

使用的依赖:Apache提供的poi包
首先导入依赖
  1. <dependency>
  2.     <groupId>org.apache.poi</groupId>
  3.     <artifactId>poi-ooxml</artifactId>
  4.     <version>5.2.2</version>
  5. </dependency>
复制代码
 核心实现
  1. //创建一个工作簿,也就是Excel文件
  2. HSSFWorkbook wb = new HSSFWorkbook();
  3. //创建一个工作表
  4. HSSFSheet sheet = wb.createSheet();
  5. //创建一行
  6. HSSFRow row = sheet.createRow(0);
  7. //创建这一行的第一个单元格
  8. HSSFCell cell = row.createCell(0);
  9. //设置单元格的内容
  10. cell.setCellValue("你好!");
  11. //输出文件
  12. //创建字节输出流
  13. File file = new File("D://excel.xls");
  14. FileOutputStream fos = new FileOutputStream(file);
  15. wb.write(fos);
  16. fos.flush();
  17. fos.close();
复制代码
 这个工作表指的是这个

运行结果
 
现在你完成了往一个单元格里写数据,如果想要做成一个表格,那就需要循环
例如现在有一个需求:现在要统计学生的签到情况,需要把学生的签到记录导出到Excel表中
这里我们用假数据模拟,首先是实体类
  1. public class CheckExcel {
  2.     private String name;//姓名
  3.     private Integer number;//学号
  4.     private Date checkTime;//签到时间
  5. }
复制代码
主体程序
  1. public class ToExcel {
  2.     static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  3.     public static void getExcel(List<CheckExcel> object) {
  4.         //创建一个工作簿,也就是Excel文件
  5.         HSSFWorkbook wb = new HSSFWorkbook();
  6.         //创建一个工作表
  7.         HSSFSheet sheet = wb.createSheet();
  8.         //第一行,标题
  9.         HSSFRow row0 = sheet.createRow(0);
  10.         HSSFCell cell0 = row0.createCell(0);
  11.         cell0.setCellValue(object.get(0).getCheckName() + "签到统计表");
  12.         //第二行,表头
  13.         HSSFRow row1 = sheet.createRow(1);
  14.         row1.setRowStyle(style);
  15.         row1.createCell(0).setCellValue("姓名");
  16.         row1.createCell(1).setCellValue("学号");
  17.         row1.createCell(2).setCellValue("签到时间");
  18.         //表中数据
  19.         int rowInt = 2;
  20.         for (CheckExcel obj : object) {
  21.             HSSFRow row = sheet.createRow(rowInt++);
  22.             int cellInt = 0;
  23.             row.createCell(cellInt++).setCellValue(obj.getName());
  24.             row.createCell(cellInt++).setCellValue(obj.getNumber());
  25.             row.createCell(cellInt).setCellValue(sdf.format(obj.getCheckTime()));//将日期转换成字符串,要不然存的是一个时间戳
  26.         }
  27.         try {
  28.             //输出文件
  29.             //创建字节输出流
  30.             File file = new File("D://excel.xls");
  31.             FileOutputStream fos = new FileOutputStream(file);
  32.             wb.write(fos);
  33.             fos.flush();
  34.             fos.close();
  35.         } catch (IOException e) {
  36.             e.printStackTrace();
  37.             System.out.println("ToExcel.getExcel");
  38.             System.out.println("IO出异常了");
  39.         }
  40.     }
  41.     public static void main(String[] args) {
  42.         List<CheckExcel> stu = new ArrayList<>();
  43.         stu.add(new CheckExcel("学生1", 1001, "高等数学", new Date()));
  44.         stu.add(new CheckExcel("学生2", 1002, "高等数学", new Date()));
  45.         stu.add(new CheckExcel("学生3", 1003, "高等数学", new Date()));
  46.         getExcel(stu);
  47.     }  
  48. }
复制代码
 运行结果

但是细心的你会发现这个表格没有居中,看起来样式很不好看,这就需要用到HSSFCellStyle设置表格的样式,具体样式设置有很多就不给大家一一演示了,这里放一个链接供大家去参考
https://poi.apache.org/apidocs/dev/org/apache/poi/hssf/usermodel/HSSFCellStyle.html
这是官方提供的API,所有方法都在里面。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表