Java处理excel根据某列的值查询,并将结果显示在其他列中
时间:2019-06-12
本文章向大家介绍Java处理excel根据某列的值查询,并将结果显示在其他列中,主要包括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);
}
}
}
原文地址:https://www.cnblogs.com/qfmy07/p/11009678.html
- 十种深度学习算法要点及代码解析
- 王健林旗下万达网科被曝大裁员 总裁出面说话了
- lodash源码分析之缓存方式的选择
- 《物联网智能终端信息安全白皮书》发布
- SemCmsv2_4 Function_php文件过滤不严导致Sql注入
- Python为什么这么火?聆听Python之父诠释Python的精神和文化
- 阿里程序员2017年终总结:web前端最有效学习方法!让你少走弯路
- 《关于深化“互联网+先进制造业”发展工业互联网的指导意见》的系列解读 解读二:打造平台体系
- 2018最火的AI丶云计算丶大数据丶物联网丶量子计算五大热门之间的关系
- 人工智能或能帮助揭示永葆青春的秘密 寻减缓衰老药物
- 近百万的“荣耀”域名遭仲裁 两个终端的对决
- IT专业人员如何看待软件定义的数据中心市场
- 安正平:网络隐私保护不能止于关闭直播平台
- 摩拜与武汉地铁深度合作,网上买地铁票又多了一种渠道
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Docker-compose 常用命令及网络设置(五)
- HashMap 源码分析
- Java 按位运算符(&,|,^,>>,<<,>>>)
- LinkedList 源码分析
- Logstash:多个配置文件(conf)
- ArrayList 源码分析
- IllegalArgumentException:argument type mismatch
- String equals()方法 源码分析
- centos7宝塔环境安装VeryNginx waf系统实现高级防火墙功能
- 使用curl探测访问响应时长
- dnspod通过接口解析本地ip python脚本
- 如何修复WordPress死亡白屏(WSoD)故障问题
- linux: 添加一个IP地址
- Nginx简易防CC策略规则
- 如何编写和优化WordPress网站的Robots.txt