package org1;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

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

public class Data_Recovery {
    public static void main(String[] args) throws IOException {
        // 创建文件输入流
        FileInputStream inputStream = new FileInputStream('input.xlsx');

        // 创建工作簿对象
        Workbook workbook = new XSSFWorkbook(inputStream);

        // 获取第一个工作表
        Sheet sheet = workbook.getSheetAt(0);

        // 将Excel表格数据转换为二维数组
        double[][] data = new double[sheet.getLastRowNum()+1][sheet.getRow(0).getLastCellNum()];
        for (int i = 0; i <= sheet.getLastRowNum(); i++) {
            Row row = sheet.getRow(i);
            for (int j = 0; j < row.getLastCellNum(); j++) {
                Cell cell = row.getCell(j);
                if (cell.getCellType() == CellType.NUMERIC) {
                    data[i][j] = cell.getNumericCellValue();
                } else {
                    data[i][j] = Double.NaN;
                }
            }
        }

        // 创建KNNAlgorithm对象
        KNNAlgorithm knn = new KNNAlgorithm();

        // 调用KNNAlgorithm的方法进行数据补全处理
        double[][] newData = knn.fillMissingData(data);

        // 检查是否已经存在名为Sheet2的工作表
        Sheet sheet2 = workbook.getSheet('Sheet2');

        // 如果Sheet2工作表已经存在且不为空,则新建一个名为Sheet2_new的工作表
        if (sheet2 != null && sheet2.getLastRowNum() > 0) {
            sheet2 = workbook.createSheet('Sheet2_new');
        } else {
            // 否则直接使用Sheet2工作表
            sheet2 = workbook.getSheet('Sheet2');
        }

        // 将数据写入工作表中
        for (int i = 0; i < newData.length; i++) {
            Row row = sheet2.createRow(i);
            for (int j = 0; j < newData[i].length; j++) {
                Cell cell = row.createCell(j);
                cell.setCellValue(newData[i][j]);
            }
        }
        // 保存Excel文件
        FileOutputStream outputStream = new FileOutputStream('input.xlsx');
        workbook.write(outputStream);

        // 关闭工作簿和文件输入流、文件输出流
        workbook.close();
        inputStream.close();
        outputStream.close();
    }
}

代码说明:

  1. 导入必要的库: 导入java.io.*org.apache.poi.ss.usermodel.*org.apache.poi.xssf.usermodel.XSSFWorkbook库,用于处理文件输入输出、操作Excel表格和创建XSSFWorkbook对象。
  2. 创建文件输入流: 创建FileInputStream对象,用于读取名为'input.xlsx'的Excel文件。
  3. 创建工作簿对象: 使用XSSFWorkbook类创建工作簿对象,并将文件输入流作为参数传入。
  4. 获取第一个工作表: 使用getSheetAt(0)方法获取工作簿中的第一个工作表。
  5. 将Excel表格数据转换为二维数组: 遍历工作表中的每一行和每一列,将单元格的值存储到一个二维数组中。
  6. 创建KNNAlgorithm对象: 创建KNNAlgorithm类的实例,用于执行KNN算法进行数据补全。
  7. 调用KNNAlgorithm的方法进行数据补全处理: 调用KNNAlgorithm对象的fillMissingData()方法,将存储Excel数据的二维数组作为参数传入,该方法返回一个填充了缺失数据的二维数组。
  8. 创建或获取Sheet2工作表: 检查工作簿中是否存在名为'Sheet2'的工作表,如果存在且不为空,则创建一个名为'Sheet2_new'的新工作表;否则,直接使用'Sheet2'工作表。
  9. 将数据写入工作表中: 将填充了缺失数据的二维数组写入到'Sheet2'或'Sheet2_new'工作表中。
  10. 保存Excel文件: 创建文件输出流,将修改后的工作簿写入到'input.xlsx'文件中。
  11. 关闭资源: 关闭工作簿、文件输入流和文件输出流,释放资源。

注意:

  • 需要将KNNAlgorithm类导入到项目中,该类实现了KNN算法,用于数据补全。
  • 可以根据实际情况修改输入输出文件名、工作表名等参数。
  • 代码中使用了Apache POI库,需要先将该库添加到项目依赖中。

希望这段代码能够帮助你理解如何使用Java和KNN算法进行Excel数据恢复。

基于KNN算法的Excel数据恢复工具(Java实现)

原文地址: https://www.cveoy.top/t/topic/f2g0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录