Excel防重 Java实现
在许多应用场景中,我们需要对Excel表格中的数据进行去重处理。比如,客户信息的维护、商品库存的数据管理等。如果数据未进行去重,会导致重复账目、重复订单等问题,从而影响企业运营的效率。
本文将介绍如何使用Java从Excel文件中读取数据,并去除重复的数据项。我们将使用Apache POI库来处理Excel文件,并以简洁的示例代码帮助您理解整个过程。
1. 环境准备
首先,确保您的开发环境中已经添加Apache POI依赖。您可以通过Maven来引入这些依赖。在pom.xml
中添加以下内容:
<dependencies>
<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>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
</dependencies>
2. 读取Excel文件
使用Apache POI可以轻松读取Excel文件中的数据。以下是一个简单的读取Excel文件的示例:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
public class ExcelReader {
public static void main(String[] args) {
String excelFilePath = "data.xlsx";
try {
FileInputStream fileInputStream = new FileInputStream(new File(excelFilePath));
Workbook workbook = new XSSFWorkbook(fileInputStream);
Sheet sheet = workbook.getSheetAt(0);
HashSet<String> uniqueData = new HashSet<>();
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Cell cell = row.getCell(0); // 读取第一列数据
if (cell != null) {
uniqueData.add(cell.getStringCellValue());
}
}
workbook.close();
fileInputStream.close();
System.out.println("Unique Data: " + uniqueData);
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码解析
- 导入依赖:首先导入Apache POI库中的相关类。
- 读取Excel文件:使用
FileInputStream
读取Excel文件,并创建Workbook
对象。 - 遍历行数据:通过
Iterator
遍历Excel表格中的每一行,并将第一列的数据添加到HashSet
中,以达到去重的效果。 - 输出结果:程序的最后,将打印出唯一的数据集合。
3. 写入去重后的数据
去重之后,您可能想将这些数据写回到Excel文件中。下面是一段实现数据写入的代码:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashSet;
public class ExcelWriter {
public static void writeUniqueData(HashSet<String> uniqueData) {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Unique Data");
int rowIndex = 0;
for (String data : uniqueData) {
Row row = sheet.createRow(rowIndex++);
Cell cell = row.createCell(0);
cell.setCellValue(data);
}
try (FileOutputStream outputStream = new FileOutputStream("unique_data.xlsx")) {
workbook.write(outputStream);
workbook.close();
System.out.println("Unique data written to 'unique_data.xlsx'");
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码解析
- 创建工作簿:首先创建一个
Workbook
对象和一个工作表。 - 写入数据:循环
uniqueData
集合中的每一项,通过createRow
和createCell
方法逐行写入Excel。 - 保存文件:使用
FileOutputStream
将数据写入新文件中,并在最后关闭工作簿。
4. 完整示例
结合以上两个部分,我们可以创建一个完整的程序来实现Excel去重的功能:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
public class ExcelDeduplication {
public static void main(String[] args) {
String excelFilePath = "data.xlsx";
HashSet<String> uniqueData = new HashSet<>();
// 读取Excel文件并去重
try {
FileInputStream fileInputStream = new FileInputStream(new File(excelFilePath));
Workbook workbook = new XSSFWorkbook(fileInputStream);
Sheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Cell cell = row.getCell(0);
if (cell != null) {
uniqueData.add(cell.getStringCellValue());
}
}
workbook.close();
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 将去重后的数据写入新的Excel文件
writeUniqueData(uniqueData);
}
public static void writeUniqueData(HashSet<String> uniqueData) {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Unique Data");
int rowIndex = 0;
for (String data : uniqueData) {
Row row = sheet.createRow(rowIndex++);
Cell cell = row.createCell(0);
cell.setCellValue(data);
}
try (FileOutputStream outputStream = new FileOutputStream("unique_data.xlsx")) {
workbook.write(outputStream);
workbook.close();
System.out.println("Unique data written to 'unique_data.xlsx'");
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. 关系图
以下是处理Excel防重的流程关系图:
erDiagram
EXCEL_FILE {
string fileName
string sheetName
}
READING_DATA {
int rowIndex
string cellValue
}
UNIQUE_DATA {
string uniqueValue
}
EXCEL_FILE ||--o{ READING_DATA : contains
READING_DATA ||--o{ UNIQUE_DATA : generates
6. 结尾
本文详细介绍了如何使用Java及Apache POI库读取Excel文件、去除重复数据并将结果写回Excel文件的全过程。通过简单的代码示例,您可以理解每一个步骤的关键功能。
如果您有任何问题或建议,欢迎通过评论区交流。希望这篇文章能够帮助您在实际项目中更轻松地处理Excel数据去重的需求。