利用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();
}
最后的结果为(截取的部分):