判断2个excel文件差异的条数

判断2个excel文件差异的条数

java 复制代码
package com.lucky.luckydoc;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ExcelComparator {

    public static void main(String[] args) throws IOException {
        String file1Path = "C:\\Users\\luckincoffee\\Downloads\\DBSearch_2024-09-14_10_59_36.xlsx";
        String file2Path = "C:\\Users\\luckincoffee\\Downloads\\DBSearch_2024-09-14_11_00_03.xlsx";

        // 读取两个 Excel 文件
        List<List<String>> file1Data = readExcel(file1Path);
        List<List<String>> file2Data = readExcel(file2Path);

        // 比较两个文件的差异
        compareExcelRows(file1Data, file2Data);
    }

    // 读取 Excel 文件中的数据
    public static List<List<String>> readExcel(String filePath) throws IOException {
        List<List<String>> data = new ArrayList<>();
        FileInputStream fis = new FileInputStream(filePath);
        Workbook workbook = new XSSFWorkbook(fis);
        Sheet sheet = workbook.getSheetAt(0); // 读取第一个工作表

        for (Row row : sheet) {
            List<String> rowData = new ArrayList<>();
            for (Cell cell : row) {
                rowData.add(getCellValueAsString(cell));
            }
            data.add(rowData);
        }
        workbook.close();
        fis.close();
        return data;
    }

    // 根据单元格的类型获取字符串形式的值
    public static String getCellValueAsString(Cell cell) {
        if (cell == null) {
            return "";
        }
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue(); // 字符串类型
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    // 如果是日期类型,返回日期格式
                    return cell.getDateCellValue().toString();
                } else {
                    // 否则返回数值类型
                    return String.valueOf(cell.getNumericCellValue());
                }
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue()); // 布尔类型
            case FORMULA:
                return cell.getCellFormula(); // 公式类型
            case BLANK:
                return ""; // 空白单元格
            default:
                return "未知类型";
        }
    }

    // 比较两个 Excel 文件的行差异
    public static void compareExcelRows(List<List<String>> file1Data, List<List<String>> file2Data) {
        int maxRows = Math.max(file1Data.size(), file2Data.size());
        List<List<String>> result = new ArrayList<>();
        if(file1Data.size()>file2Data.size()){
            file1Data.removeAll(file2Data);
            result=file1Data;
        }else if(file2Data.size()>file1Data.size()){
            file2Data.removeAll(file1Data);
            result=file2Data;
        }
       for (List<String> row : result){
           System.out.println(row);
       }
//        for (int i = 0; i < maxRows; i++) {
//            List<String> row1 = i < file1Data.size() ? file1Data.get(i) : new ArrayList<>();
//            List<String> row2 = i < file2Data.size() ? file2Data.get(i) : new ArrayList<>();
//
//            if (!row1.equals(row2)) {
//                System.out.println("第 " + (i + 1) + " 行不同:");
//                System.out.println("文件1: " + row1);
//                System.out.println("文件2: " + row2);
//            }
//        }
    }
}
相关推荐
それども7 小时前
Apache POI XSSFWorkbook 和 SXSSFWorkbook 的区别
apache·excel
—Miss. Z—14 小时前
Power Query数据分类整合
excel
开开心心就好18 小时前
系统管理工具,多功能隐私清理文件粉碎工具
java·网络·windows·r语言·电脑·excel·symfony
sinat_3751122621 小时前
abap excel上传
excel·上传·sap·abap
·云扬·1 天前
【实操教程】Excel文件转CSV并导入MySQL的完整步骤
android·mysql·excel
城数派1 天前
2019-2025年各区县逐月新房房价数据(Excel/Shp格式)
大数据·数据分析·excel
Elieal1 天前
EasyExcel 实现 Excel 导入导出
java·excel
徐赛俊2 天前
Excel 打开后界面一片灰、无工作表的原因与解决方案(Markdown 教程)
excel
hacker7072 天前
精进Excel图表:AI赋能,成为Excel图表高手
人工智能·信息可视化·excel
Data-Miner2 天前
结合AI Agent的excel大数据处理技巧
人工智能·excel