Java中使用Excel的vlookup函数

工作需要有一个需求需要对比两个表格的数据,在外面可以直接用vlookup函数实现,后面想用代码去做,刚开始用apache的poi读取,两个Excel表格俩个循环去判断,后面发现太慢了去找了一下,网上也没啥好的dome,自己慢慢试了一套,奉上代码,可以参考一下:

// An highlighted block
		OutputStream out = null ;
		BufferedInputStream is = new BufferedInputStream(new FileInputStream(new 	File(fileName)));//filename为文件所属的物理路径
		Workbook hssfWorkbook = null;
		if (fileName.endsWith("xlsx")){
			hssfWorkbook = new XSSFWorkbook(is);//Excel 2007
		}else if (fileName.endsWith("xls")){
			hssfWorkbook = new HSSFWorkbook(is);//Excel 2003
		}else if(fileName.endsWith("xlsm")) {
			hssfWorkbook = new XSSFWorkbook(is);
        }
		for (int numSheet = 0; numSheet <1; numSheet++) {
			
			Sheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
			if (hssfSheet == null) {
				continue;
			}
			Row headrow = hssfSheet.getRow(0);
			int count = headrow.getLastCellNum();
			Cell headcell = headrow.createCell(count);
			headcell.setCellValue("最后一列");
			
			
			for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
				Row hssfRow = hssfSheet.getRow(rowNum);
				hssfRow.createCell(count).setCellFormula("VLOOKUP(A"+(rowNum+1)+",'D:\\[AspOp.csv]AspOp'!$A:$E,5,false)");
			}
		}
		out = new FileOutputStream(fileName);
		hssfWorkbook.write(out);
		out.flush();
		out.close();

需要import的类



import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

需要的jar包poi-ooxml-3.9.jar
由于Excel的版本有区别,需要new 不同的Workbook,核心就是这一句:

hssfRow.createCell(count).setCellFormula("VLOOKUP(A"+(rowNum+1)+",'D:\\[AspOp.csv]AspOp'!$A:$E,5,false)");
  • VLOOKUP函数含义:
    • 第一个参数:要查找的值
    • 第二个参数:要查找的区域(这个地方我之前把要对比的文件放到文件夹里面,老是各种报错,后面放到根目录就好了,待研究)
    • 第三个参数:返回数据在查找区域的第几列数
    • 第四个参数:精确匹配/近似匹配 FALSE(或0)/TRUE(或1或不填)

你可能感兴趣的:(java)