2021-06-26 利用Java语言操作Excel表格

利用java语言操作Excel表格——导入操作

  本文章将存在数据库中的数据有选择性的挑选出来,随后将挑选出来的数据按照一定的格式导入到Excel文件中(文件格式为.xls)。
  首先,使用到的数据库软件为MySQL,编译语言为Java语言,使用的编译软件为IntelliJ IDEA,同时还需要使用到jar包,jar包为Apache POI,目的是为了读和写Excel文件,上篇文章已发下载该jar包的官网链接。
  数据库中存储的数据为某一个时段的各个房间的用电数据,主要分为三个字段:
  第一个字段为存储房间的id号码,内容为房间号,数据类型为VARCHAR类型;
  第二个字段为某一个房间的测试时段,数据类型为DATE类型;
  第三个字段为某个房间测试时段下的用电功率值,数据类型为DUBLE类型。
  以下为基于Java语言的代码,由于每一行都有注释,因此不再赘述。

 // 首先先获取文件的路径,文件的路径名为"C:\\Users\\HP\\Desktop\\毕业设计的数据资料\\毕业设计的数据资料\\宿舍用电数据\\out.xls"
        File file2 = new File("C:\\Users\\HP\\Desktop\\毕业设计的数据资料\\毕业设计的数据资料\\宿舍用电数据\\out.xls");
        //创建一个文件输出流
        FileOutputStream fileOutputStream = null;
        // 如果该路径下的文件不存在的情况下,那么就创建一个新的文件,文件名为out.xls(主要是excel)
        if (!file2.exists()) {
            try {
                file2.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        // 创建一个file2文件的文件输出流
        try {
            fileOutputStream = new FileOutputStream(file2);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 创建一个Excel文件
        Workbook book = new HSSFWorkbook();
        // 创建一个命名为sheet3的文件工作簿
        Sheet sheet3 = book.createSheet();
        // 创建一个表头,为该文件工作簿的第一行
        Row head = sheet3.createRow(0);
        // 创建表头的内容
        // 首先表头的第一列为:id,其中cell1是一个单元格
        Cell cell1 = head.createCell(0);
        cell1.setCellValue("ID");
        // 其次表头的第二列为:数据值,其中cell2是一个单元格
        Cell cell2 = head.createCell(1);
        cell2.setCellValue("VALUE");
        // index表示行号
        int index = 1;
        // 将schoolData集合转换为数据流
        Map<String, List<SchoolData>> listMap = ss.stream()
                // 从数据流中根据id来分组并收集以SchoolData为类型的数据,最后以map键值对的形式存储起来
                .collect(Collectors.groupingBy(e -> e.getRoom_id()));

        // 遍历map
        // entry为map中存储的一个个键值对
        // entrySet() 方法可以与 for-each 循环一起使用,用来遍历迭代 HashMap 中每一个键值对
        for (Map.Entry<String, List<SchoolData>> entry : listMap.entrySet()) {
            // 当每次创建新的一行,index加1
            Row head1 = sheet3.createRow(index++);
            // 创建每一行的第一列,cell1为一个单元格
            Cell cell11 = head1.createCell(0);
            // 在该单元格设置键值对的关键值:id号
            cell11.setCellValue(entry.getKey());
            // index为列号,起始点为第二列
            int index2 = 1;
            // 将其关键值(id号)对应的以SchoolData类型的数据遍历一遍
            for (SchoolData schoolData : entry.getValue()) {
                // 由于Excel文件中最多的列为256列,所以当超过256列遍跳出循环
                if (index2 > 255) break;
                // 创建每一行从第二列开始的单元格,每次遍历一个SchoolData数据index2 + 1,列往后移一个
                Cell cell12 = head1.createCell(index2++);
                SchoolDataDao schoolDataDao1 = new SchoolDataDao();
                // 根据自己的需要将SchoolData中的部分数据存储在cell2单元格中
                cell12.setCellValue(schoolDataDao1.DateToMySQLDateTime(schoolData.getTime()));
            }
        }

        // 将创建的Excel文件写入到文件输入流中
        try {
            book.write(fileOutputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

最后的结果为(截取的部分):部分结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值