Java 读取两个excel表,把两个excel表中一样的数据不变的输出,不一样的计算差值后输出,最终输出整条记录到新的excel,代码案例
时间: 2024-02-23 21:59:50 浏览: 142
java如何生成可变表头的excel
好的,下面提供一个简单的Java代码示例,实现读取两个Excel表格并进行比对、计算差值、输出到新的Excel表格中:
```java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelComparator {
public static void main(String[] args) throws IOException {
// 读取第一个Excel表格
FileInputStream file1 = new FileInputStream("path/to/excel1.xlsx");
Workbook workbook1 = new XSSFWorkbook(file1);
Sheet sheet1 = workbook1.getSheetAt(0);
int lastRowNum1 = sheet1.getLastRowNum();
// 读取第二个Excel表格
FileInputStream file2 = new FileInputStream("path/to/excel2.xlsx");
Workbook workbook2 = new XSSFWorkbook(file2);
Sheet sheet2 = workbook2.getSheetAt(0);
int lastRowNum2 = sheet2.getLastRowNum();
// 存储第一个Excel表格中的数据
Map<String, Row> map1 = new HashMap<String, Row>();
for (int i = 0; i <= lastRowNum1; i++) {
Row row = sheet1.getRow(i);
Cell keyCell = row.getCell(0);
String key = keyCell.getStringCellValue();
map1.put(key, row);
}
// 存储输出到新Excel表格中的数据
List<Row> outputRows = new ArrayList<Row>();
// 比对第二个Excel表格中的数据,如果和第一个表格中的数据相同,则直接输出
// 如果不同,则计算差值并输出
for (int i = 0; i <= lastRowNum2; i++) {
Row row2 = sheet2.getRow(i);
Cell keyCell2 = row2.getCell(0);
String key2 = keyCell2.getStringCellValue();
Row row1 = map1.get(key2);
if (row1 != null) {
// 两个表格中的数据相同,直接输出
outputRows.add(row1);
} else {
// 两个表格中的数据不同,计算差值并输出
Row outputRow = sheet1.createRow(sheet1.getLastRowNum() + 1);
Cell keyCell = outputRow.createCell(0);
keyCell.setCellValue(key2);
for (int j = 1; j < row2.getLastCellNum(); j++) {
Cell cell2 = row2.getCell(j);
Cell cell1 = row1.getCell(j);
Cell outputCell = outputRow.createCell(j);
if (cell1 != null && cell2 != null) {
double value1 = cell1.getNumericCellValue();
double value2 = cell2.getNumericCellValue();
outputCell.setCellValue(value2 - value1);
} else {
outputCell.setCellValue(cell2.getStringCellValue());
}
}
outputRows.add(outputRow);
}
}
// 将输出的数据写入到新Excel表格中
FileOutputStream outputStream = new FileOutputStream("path/to/output.xlsx");
workbook1.write(outputStream);
// 关闭文件流
file1.close();
file2.close();
outputStream.close();
System.out.println("比对完成,输出到新Excel表格中!");
}
}
```
以上代码仅供参考,具体实现还需要根据实际情况进行调整。
阅读全文