依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
代码
package com.example.demo1;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.StringUtils;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.*;
public class Demo01 {
public static void main(String[] args) {
// 初始化工作簿
Workbook workbook = new XSSFWorkbook();
// 读取数据
Map<String, String> userMap = getMap("C:\\Users\\EucliwoodHellsycthe\\Desktop\\Metadata.xlsx");
Map<String, String> systemMap = getMap("C:\\Users\\EucliwoodHellsycthe\\Desktop\\制度文件20240603150849.xlsx");
Map<String, String> nameMap = getMap("C:\\Users\\EucliwoodHellsycthe\\Desktop\\名称.xlsx");
List<String> list = new ArrayList<>();
List<String> voList = new ArrayList<>();
// 处理数据
for (Map.Entry<String, String> entry : userMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (!StringUtils.isEmpty(systemMap.get(key))) {
String val = systemMap.get(key);
if (!val.equals(value)) {
list.add(MessageFormat.format("{0} {1} {2} {3}", key, nameMap.get(key), value, val));
}
} else {
voList.add(MessageFormat.format("{0} {1}", key, nameMap.get(key)));
}
}
// 打印并写入不对应的版本号id
System.out.println("不对应的版本号id 为:");
list.forEach(System.out::println);
setUserMap(workbook, list, "Sheet1");
// 打印并写入系统中不存在的id
System.out.println("系统中不存在的id 为:");
voList.forEach(System.out::println);
setUserMap(workbook, voList, "Sheet2");
// 将工作簿写入文件并关闭
try (FileOutputStream fos = new FileOutputStream("C:\\Users\\EucliwoodHellsycthe\\Desktop\\output.xlsx")) {
workbook.write(fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static Map<String, String> getMap(String path) {
Map<String, String> userMap = new HashMap<>();
try (FileInputStream fis = new FileInputStream(path);
Workbook workbook = new XSSFWorkbook(fis)) {
Sheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Cell keyCell = row.getCell(0);
Cell valueCell = row.getCell(2);
if (keyCell != null && valueCell != null) {
String key = keyCell.getStringCellValue();
String value = valueCell.getStringCellValue();
userMap.put(key.trim(), value.trim());
}
}
} catch (IOException e) {
e.printStackTrace();
}
return userMap;
}
/**
* 将数据写入指定的Sheet页
* @param workbook 工作簿实例
* @param dataList 数据集
* @param sheetName 页名称
*/
private static void setUserMap(Workbook workbook, List<String> dataList, String sheetName) {
Sheet sheet = workbook.createSheet(sheetName);
// 写入数据到工作表中
int rowNum = 0;
for (String data : dataList) {
Row row = sheet.createRow(rowNum++);
String[] values = data.split(" ");
for (int i = 0; i < values.length; i++) {
Cell cell = row.createCell(i);
cell.setCellValue(values[i]);
}
}
}
}