Java处理excel根据某列的值查询,并将结果显示在其他列中

Posted qfmy07

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java处理excel根据某列的值查询,并将结果显示在其他列中相关的知识,希望对你有一定的参考价值。

这是公司项目,需要帮客户查询员工用餐消费记录中每个员工所在的部门,并填入部门这一列。(如图)

技术图片

根据每个员工的卡号,查询所在部门,再填入部门这一列。
下面是实现代码:(具体变量值请根据自身需要进行修改)


package cn.netmis.cmd;

import cn.netmis.cmd.other.Xls;
import cn.netmis.core.util.DBUtils;
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.XSSFWorkbook;

import java.io.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
* 操作excel表格
* 读取表格中的工号,同时查询该员工所在部门,填入
*/
public class operExcel
private static final String XLS = "xls";
private static final String XLSX = "xlsx";

/**
* 检查文件是否存在
* 并检查是否是xls或xlsx文件
* @param file
* @throws IOException
*/
public static void checkFile(File file) throws IOException
//判断文件是否存在
if(!file.exists())
throw new FileNotFoundException("文件不存在");

//获取文件名
String fileName=file.getName();
//判断文件是否是excel文件
if (!fileName.endsWith(XLS)&&!fileName.endsWith(XLSX))
throw new IOException(fileName+"不是excel文件");

System.out.println("文件存在且格式正确!");



/**
* 获取表格
* @param file
* @return
* @throws IOException
*/
public static Workbook getWookBook(File file) throws IOException
//获取文件名
String fileName=file.getName();
//创建Workbook工作簿对象,表示整个excel
Workbook workbook=null;
//获取Excel文件的io流
InputStream is=new FileInputStream(file);
//根据文件后缀名不同,获得不通的Wookbook实现类对象
if(fileName.endsWith(XLS))
workbook=new HSSFWorkbook(is);

else if(fileName.endsWith(XLSX))
workbook=new XSSFWorkbook(is);


return workbook;


/**
* 获取一行中所有单元格的内容并存入集合
* @param file
* @return
* @throws IOException
*/
public static List<String> getTableHanderList(File file,Connection yntv,String filePath,String fileName,Integer statIndex,Integer endIndex) throws IOException, SQLException
checkFile(file);
Workbook wb=getWookBook(file);
List<String> handList=new ArrayList<>();
Sheet sheet=wb.getSheetAt(0);
Row row=null;
//循环获取所有员工的消费刷卡记录
//获取到工号并存入集合
for (int j=statIndex;j<endIndex;j++)
row=sheet.getRow(j);

if(row==null)
return handList;


Cell cell=row.getCell(3);//获取到表格中所有员工的工号
String cellVal=getCellValue(cell);
System.out.println("-------工号:"+cellVal);
//通过工号查询到该员工的部门
String bmmc=findBm(cellVal,yntv,handList);
System.out.println("-------bmmc:"+bmmc);

Cell setCellVal=row.getCell(1);//要放入部门的列
setCellVal.setCellValue(bmmc);
setCellVal.setCellType(Cell.CELL_TYPE_STRING);
File file1=new File(filePath,fileName);
OutputStream out=new FileOutputStream(file1);
wb.write(out);

// handList.add(getCellValue(cell));

return handList;


/**
* 获取单元格的内容
* @param cell
* @return
*/
public static String getCellValue(Cell cell)
String cellValue="";
if(cell==null)
return cellValue;

if(cell.getCellType()==cell.CELL_TYPE_NUMERIC)
cell.setCellType(cell.CELL_TYPE_STRING);

//判断类型
switch (cell.getCellType())
case Cell.CELL_TYPE_NUMERIC: //数字
cellValue=String.valueOf(cell.getNumericCellValue()).trim();
break;
case Cell.CELL_TYPE_STRING: //字符串
cellValue=String.valueOf(cell.getStringCellValue()).trim();
break;

return cellValue;


/**
* 通过工号查询部门并存入集合
* @param cellVal
* @param yntv
* @param handList
* @throws SQLException
*/
public static String findBm(String cellVal,Connection yntv,List<String> handList) throws SQLException
String sql = "select bmmc from sys_user where userno="+cellVal;
Statement st = yntv.createStatement();
ResultSet rs = st.executeQuery(sql);

if (rs.next())
return rs.getString("bmmc");

rs.close();
st.close();

return null;


public static void main(String [] args) throws IOException, SQLException
Connection yntv = DBUtils.createConn("config/websql.properties");
// String fileName="hzst.xls";//食堂就餐卡刷卡挂账情况统计表(汉族)
String fileName="qzst.xls";//清真食堂就餐卡刷卡挂账情况统计表
String filePath="/home/ljc/Desktop/st/";//读取时的路径
String descfilePath="/home/ljc/Desktop/st/finishing";//修改后保存的路径
File file=new File(filePath,fileName);
Integer statIndex=3;//行数的开始
Integer endIndex=258;//行数的结束
List<String> cellVal=getTableHanderList(file,yntv,descfilePath,fileName,statIndex,endIndex);
for (String str:cellVal)
System.out.println(str);




以上是关于Java处理excel根据某列的值查询,并将结果显示在其他列中的主要内容,如果未能解决你的问题,请参考以下文章

excel中如何根据查找某行某列的一个值,输出该值下一行的数据?

怎样取得DataTable某行某列的值

怎样取得DataTable某行某列的值

C# 读取Excel模板 修改某行某列的值 另存为新的Excel

c# 怎么更改DataTable 中某列的值?

如何更改SQL中某列的值