如何在java中比较并获得预期的结果excel工作表?

如何在java中比较并获得预期的结果excel工作表?,java,xlsx,Java,Xlsx,我遇到了一个问题,我必须使用java来比较excel表格。我在网上搜索并找到了一个代码。即使它不完全符合我的要求,我也想过在代码运行后修改它。但是当我开始运行它时,它说没有POI库,并在从web下载所需的库后抛出了一些错误。代码没有错误,但我不知道应该在哪里给出excel工作表的路径以进行比较。因为没有要比较的表,所以我将得到默认结果作为输出。这里有人能帮我把excel文档的链接放在代码中的方式和位置吗?蒂亚 我只在eclipse中尝试过,因为我没有管理员权限将外部库文件添加到tryincmd

我遇到了一个问题,我必须使用java来比较excel表格。我在网上搜索并找到了一个代码。即使它不完全符合我的要求,我也想过在代码运行后修改它。但是当我开始运行它时,它说没有POI库,并在从web下载所需的库后抛出了一些错误。代码没有错误,但我不知道应该在哪里给出excel工作表的路径以进行比较。因为没有要比较的表,所以我将得到默认结果作为输出。这里有人能帮我把excel文档的链接放在代码中的方式和位置吗?蒂亚

我只在eclipse中尝试过,因为我没有管理员权限将外部库文件添加到tryincmd

package org.apache.poi.ss.examples;
导入java.io.File;
导入java.util.ArrayList;
导入java.util.Date;
导入java.util.Iterator;
导入java.util.List;
导入java.util.Locale;
导入org.apache.poi.ss.usermodel.BorderStyle;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.CellType;
导入org.apache.poi.ss.usermodel.Color;
导入org.apache.poi.ss.usermodel.DateUtil;
导入org.apache.poi.ss.usermodel.FillPatternType;
导入org.apache.poi.ss.usermodel.HorizontalAlignment;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.ss.usermodel.WorkbookFactory;
导入org.apache.poi.ss.util.CellReference;
导入org.apache.poi.xssf.usermodel.XSSFCell;
导入org.apache.poi.xssf.usermodel.XSSFCellStyle;
导入org.apache.poi.xssf.usermodel.XSSFColor;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
公共类比较器{
私有静态最终字符串CELL_DATA_NOT_MATCH=“CELL DATA NOT MATCH::”;
私有静态最终字符串单元格\u字体\u属性\u不匹配=“单元格字体属性不匹配::”;
私有静态类定位器{
工作手册;
薄板;
行行;
细胞;
}
差异列表=新的ArrayList();
公共静态void main(字符串[]args)引发异常{
如果(args.length!=2 | |!(新文件(args[0]).exists())| |!(新文件(args[1]).exists()){
System.err.println(“java-cp”+ExcelComparator.class.getCanonicalName()+%s[%d]!=workbook2->%s[%d],“列数不匹配::”,loc1.sheet.getSheetName(),num1,loc2.sheet.getSheetName(),num2);
差异列表。添加(str);
}
}
}
专用空心比较器EnumberOfRowsInSheets(定位器loc1、定位器loc2){
对于(int i=0;i%s[%d]!=workbook2->%s[%d],“工作表名称不匹配::”,name1,i+1,name2,i+1);
差异列表。添加(str);
}
}
}
私有void addMessage(定位器loc1、定位器loc2、字符串messageStart、字符串value1、字符串value2){
String str=String.format(Locale.ROOT,“%s\nworkbook1->%s->%s[%s]!=workbook2->%s->%s[%s]”,messageStart,loc1.sheet.getSheetName(),new CellReference(loc1.cell).formataString(),value1,loc2.sheet.getSheetName(),new CellReference(loc2.cell).formataString(),value2);
差异列表。添加(str);
}
/**
*检查单元格对齐是否匹配。
*/
专用void iscellaignmentmatches(定位器loc1、定位器loc2){
if(loc1.cell.getCellStyle()==null | | loc2.cell.getCellStyle()==null){
返回;
}
HorizontalAlignment align1=loc1.cell.getCellStyle().getAlignment();
HorizontalAlignment align2=loc2.cell.getCellStyle().getAlignment();
如果(align1!=align2){
addMessage(loc1,loc2,“单元格对齐不匹配::”,align1.name(),align2.name());
}
}
私有void isCellBorderMatches(定位器loc1、定位器loc2、字符borderSide){
if(!(loc1.cell instanceof XSSFCell)| | loc1.cell.getCellStyle()==null | | | loc2.cell.getCellStyle()==null){
返回;
}
XSSFcellStyle1=((XSSFCell)loc1.cell).getCellStyle();
XSSFcellStyle2=((XSSFCell)loc2.cell).getCellStyle();
布尔b1,
b2;
字符串边框名称;
开关(边界侧){
案例“t”:
违约:
b1=style1.getBorderTop()==BorderStyle.THIN;
b2=style2.getBorderTop()==BorderStyle.THIN;
borderName=“TOP”;
打破
案例“b”:
b1=style1.getBorderBottom()==BorderStyle.THIN;
b2=style2.getBorderBottom()==BorderStyle.THIN;
borderName=“底部”;
打破
案例“l”:
b1=style1.getBorderLeft()==BorderStyle.THIN;
b2=style2.getBorderLeft()==BorderStyle.THIN;
borderName=“左”;
打破
案例“r”:
b1=style1.getBorderRight()==BorderStyle.THIN;
b2=style2.getBorderRight()==BorderStyle.THIN;
borderName=“右”;
打破
}
如果(b1!=b2){
addMessage(loc1、loc2,“单元格边框属性不匹配::”,(b1?”:“不”)+边框名称+“边框”,“b2?”:“不”)+边框名称+“边框”);
}
}
私有void isCellContentMatches(定位器loc1、定位器loc2){
字符串str1=loc1.cell.toString();
字符串str2=loc2.cell.toString();
如果(!str1.等于(str2)){
addMessage(loc1、loc2、单元格数据不匹配、str1、str2);
}
}
P
java -jar pathtoyourjarfile.jar file1 file2