java - 如何使用POI检查excel中的重复记录?

标签 java excel apache-poi

下面是使用poi读取excel文件的代码:工作正常

public class ReadExcelDemo { 
    public static void main(String[] args)  { 
 try {           
     FileInputStream file = new FileInputStream(new File("demo.xlsx"));  
     List sheetData = new ArrayList();

    XSSFWorkbook workbook = new XSSFWorkbook(file); 

    XSSFSheet sheet = workbook.getSheetAt(0);
  ArrayList<Form> vipList = new ArrayList<Form>();
    Iterator<Row> rowIterator = sheet.iterator();   
    while (rowIterator.hasNext()) {            
        Row row = rowIterator.next();

        Iterator<Cell> cellIterator = row.cellIterator();   
        List data = new ArrayList();

        while (cellIterator.hasNext())  { 

            Cell cell = cellIterator.next();    

            switch (cell.getCellType())                     {        
                case Cell.CELL_TYPE_NUMERIC:  System.out.print(cell.getNumericCellValue() + "\t"); 
            break;                       
                case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue() + "\t");  
            break;     
            }           
        }

    }  


    }

现在,如果 excel 包含重复记录,我应该能够打印一条简单的错误消息。我该怎么做?

例子:

ID    Firstname     Lastname     Address
  1     Ron           wills      Paris
  1     Ron           wills      London

现在我只想检查 3 列的重复项:ID、名字和姓氏。如果这些列一起包含与上例所示相同的数据,则需要将其视为重复。

我有一个 pojo 类 Form,由带有 getter 的 id、名字和姓氏组成

和二传手。使用 setter 方法将读取的每个记录写入 pojo 类。然后我使用 getter 获取值并将它们添加到 arraylist 对象。现在列表对象包含所有记录。我如何比较它们?

最佳答案

将数据放入集合中并在每个新条目之前检查包含。如果您使用 HashSet,它会非常快。你可以假装一切都是字符串来进行比较。

        Set data = new HashSet();

    while (cellIterator.hasNext())  { 

        Cell cell = cellIterator.next();    
        if(data.contains(cell.getStringCellValue())
            trow new IllegalDataException()
        data.add(cell.getStringCellValue();

        switch (cell.getCellType())                     {        
            case Cell.CELL_TYPE_NUMERIC:  System.out.print(cell.getNumericCellValue() + "\t"); 
        break;                       
            case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue() + "\t");  
        break;     
        }           
    }

如果您需要实际比较整行,您可以创建一个包含所有字段的类,然后只需覆盖 equals 方法即可。然后将其放入一组并进行比较。

关于java - 如何使用POI检查excel中的重复记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31320795/

相关文章:

java - 我们可以禁用 AOP 调用吗?

Java客户端证书冲突

arrays - 一次将数组添加到 ArrayList

python - 我正在尝试将已刮取的数据写入/粘贴到特定的 Excel 电子表格单元格位置,但我不知道如何去做

java - 将单个 POI SS 表转换为 byte[] - Java

java - 如果长度为 0,createTextLengthConstraint 不起作用?

java - 如何从 Tapestry 5 中的 DOM 元素获取文本值

java - 如何创建一个代码来告诉两个整数互质?

excel - 如何控制 VBA 类何时终止

用于将任何文件的内容转换为文本文件的 Java 实用程序。