我有2个excel文件,我想比较内容并突出显示差异。 例如:
第一个文件......
name|age
abc|123
def|456
second file...
name|age
abc|123
def|456
ghi|789 - this being the differece
有没有第三方图书馆这样做? 或者最好的方法是什么?
答案 0 :(得分:7)
像DaDaDom一样,Apache POI正是您所寻找的。您可以从this page下载。请注意,POI项目并非完全独立,您可能需要下载一些额外的库。按照Apache POI网站上的说明进行操作。这是你如何使用它:
InputStream myxls = new FileInputStream("workbook.xls"));
HSSFWorkbook wb = new HSSFWorkbook(myxls); // for *.xlsx use XSSFWorkbook
如果是新文件,您可能需要在继续之前创建工作表,但在这种情况下,文件已经创建。
HSSFSheet sheet = wb.getSheetAt(0); // first sheet
HSSFRow row = sheet.getRow(0); // first row
HSSFCell cell = row.getCell((short)0); // first cell
从细胞使用中获取价值:
String value = cell.getStringCellValue();
但是,如果存储在单元格中的类型是数字,则会出错。如果使用数字:
Int value = cell.getCellValue();
这是我编写的用于处理不同单元格数据类型的方法:
public String getValue(int x, int y){
Row row = this.activeSheet.getRow(y);
if(row==null) return "";
Cell cell = row.getCell(x);
if(cell==null) return "";
int type = cell.getCellType();
switch(type){
case 0:
return cell.getNumericCellValue() + "";
case 1:
return cell.getStringCellValue();
case 2:
return cell.getCellFormula();
case 3:
return "";
case 4:
return cell.getBooleanCellValue() + "";
case 5:
return cell.getErrorCellValue() + "";
default:
return "";
}
}
我希望这个对Apache POI的快速介绍可以帮助您完成项目:)
答案 1 :(得分:3)
从this question开始,我的回答在下面部分重复。
我的项目simple-excel提供了一堆Hamcrest Matchers并包含了Apache POI的语法。
当您执行以下操作时,
assertThat(actual, WorkbookMatcher.sameWorkbook(expected));
你会看到,例如,
java.lang.AssertionError:
Expected: entire workbook to be equal
but: cell at "C14" contained <"bananas"> expected <nothing>,
cell at "C15" contained <"1,850,000 EUR"> expected <"1,850,000.00 EUR">,
cell at "D16" contained <nothing> expected <"Tue Sep 04 06:30:00">
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
答案 2 :(得分:0)
我会使用epplus将两个文档加载到数据表中,然后迭代它们以找到差异。 根据您想要突出显示差异的方式,您可以使用epplus为单元格着色并将其保存回文件..