设为首页 收藏本站
查看: 853|回复: 0

[经验分享] java 使用apache POI 解析读取 Excel

[复制链接]

尚未签到

发表于 2017-1-8 08:50:57 | 显示全部楼层 |阅读模式
  这段时间重新作回开发,接手一个EXCEL文件读取任务。关键代码如下,代码功能尚不完全,诸君使用时需要自己斟酌。

//Excel单元格 数据格式转换,xls,xlsx文件支持
private String getCellValue(Cell cell){
String str=null;
if(cell instanceof XSSFCell){
XSSFCell xssfCell = (XSSFCell)cell;
if(xssfCell.getCellType()==Cell.CELL_TYPE_NUMERIC){
if(HSSFDateUtil.isCellDateFormatted(xssfCell)){
double d = xssfCell.getNumericCellValue();
Date date = HSSFDateUtil.getJavaDate(d);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
str = dateFormat.format(date);
}else{
double val =xssfCell.getNumericCellValue();
int intVal=new Double(val).intValue();
str = Integer.toString(intVal);
}
}else if(xssfCell.getCellType()==Cell.CELL_TYPE_BOOLEAN){
boolean  bl= xssfCell.getBooleanCellValue();
str =Boolean.toString(bl);
}else if(xssfCell.getCellType()==Cell.CELL_TYPE_STRING){
str = xssfCell.getStringCellValue();
}else if(xssfCell.getCellType()==Cell.CELL_TYPE_FORMULA){
double formula = xssfCell.getNumericCellValue();
if(HSSFDateUtil.isValidExcelDate(formula)){
Date date = HSSFDateUtil.getJavaDate(formula);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
str = dateFormat.format(date);
}else{
int intVal=new Double(formula).intValue();
str = Integer.toString(intVal);
}
}else if(xssfCell.getCellType()==Cell.CELL_TYPE_BLANK){
str="";
}
}else if (cell instanceof HSSFCell){
HSSFCell hssfCell = (HSSFCell)cell;
if(hssfCell.getCellType()==Cell.CELL_TYPE_NUMERIC){
if(HSSFDateUtil.isCellDateFormatted(hssfCell)){
double d = hssfCell.getNumericCellValue();
Date date = HSSFDateUtil.getJavaDate(d);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
str = dateFormat.format(date);
}else{
double val =hssfCell.getNumericCellValue();
int intVal=new Double(val).intValue();
str = Integer.toString(intVal);
}
}else if(hssfCell.getCellType()==Cell.CELL_TYPE_BOOLEAN){
boolean  bl= hssfCell.getBooleanCellValue();
str =Boolean.toString(bl);
}else if(hssfCell.getCellType()==Cell.CELL_TYPE_STRING){
str = hssfCell.getStringCellValue();
}else if(hssfCell.getCellType()==Cell.CELL_TYPE_FORMULA){
double formula = hssfCell.getNumericCellValue();
if(HSSFDateUtil.isValidExcelDate(formula)){
Date date = HSSFDateUtil.getJavaDate(formula);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
str = dateFormat.format(date);
}else{
int intVal=new Double(formula).intValue();
str = Integer.toString(intVal);
}
}else if(hssfCell.getCellType()==Cell.CELL_TYPE_BLANK){
str="";
}
}
return str;
}
  偷个懒贴上关键代码

private void excelRead(MultipartFile file){
Info info =null;
// excel文件解析
XSSFWorkbook workbook = null;
try {
workbook = new XSSFWorkbook(file.getInputStream());
XSSFSheet sheet = workbook.getSheetAt(0);
List<Info> InfoList = new ArrayList<Info>();
for(int i=sheet.getFirstRowNum()+1;i<=sheet.getLastRowNum();i++){
Row row = sheet.getRow(i);
info = new Info();
XSSFCell id = (XSSFCell) row.getCell(0);
//读到空行时终止
if(id==null){
break;
}
info.setId(getCellValue(dealerId));
XSSFCell date =(XSSFCell)row.getCell(7);
//日期
try {
info.setDate(DateUtils.parseDate(getCellValue(date), "yyyy-MM-dd"));
} catch (ParseException e) {
e.printStackTrace();
}
//电话号码需要特殊转换
XSSFCell phone =(XSSFCell)row.getCell(8);
phone.setCellType(Cell.CELL_TYPE_STRING);
info.setPhone(getCellValue(phone));
XSSFCell installRemark =(XSSFCell)row.getCell(9);
info.setRemark(getCellValue(installRemark));
//将clientInstallInfo 对象添加至list中
infoList.add(info);
}
for(int size=0;size<infoList.size();size++){
//spring data jpa
infoService.save(infoList.get(size));
}
} catch (IOException e) {
e.printStackTrace();
}
}
  其他的Wookbook操作代码:


//获取Excel xls,xlsx 格式文件 ,返回为List<Map<Integer,String>>
private List<Map<Integer,String>> getExcelResult(Workbook workbook){
List<Map<Integer,String>> resultList = new ArrayList<Map<Integer,String>>();
Map<Integer,String> rowMap = null;
//获取Excel文档中工作薄个数
int num = workbook.getNumberOfSheets();
if (workbook instanceof XSSFWorkbook){
//获取第一个工作薄
XSSFSheet xssfSheet =(XSSFSheet)workbook.getSheetAt(0);
int rows=xssfSheet.getPhysicalNumberOfRows();
for(int i =1;i<=rows;i++){
XSSFRow xssfRow = xssfSheet.getRow(i);
rowMap = new HashMap<Integer, String>();
System.out.println(xssfRow);
short minColIx = xssfRow.getFirstCellNum();
short maxColIx = xssfRow.getLastCellNum();
for(short colIx=minColIx; colIx<maxColIx; colIx++) {
XSSFCell xssfCell = xssfRow.getCell(colIx);
if(xssfCell == null) {
continue;
}
xssfCell.setCellType(Cell.CELL_TYPE_STRING);
int cIndex =xssfCell.getColumnIndex();
if(xssfCell.getStringCellValue().equals("")){
rowMap.put(cIndex,"");
}else{
rowMap.put(cIndex, xssfCell.getStringCellValue());
}
}
resultList.add(rowMap);
}
}else if(workbook instanceof HSSFWorkbook){
//获取第一个工作薄
HSSFSheet hssfSheet =(HSSFSheet)workbook.getSheetAt(0);
//Map<Integer,String> rowMap = null;
int rows=hssfSheet.getPhysicalNumberOfRows();
for(int i =1;i<=rows;i++){
HSSFRow hssfRow = hssfSheet.getRow(i);
rowMap = new HashMap<Integer, String>();
short minColIx = hssfRow.getFirstCellNum();
short maxColIx = hssfRow.getLastCellNum();
for(short colIx=minColIx; colIx<maxColIx; colIx++) {
int col = colIx;
HSSFCell hssfCell = hssfRow.getCell(col);
if(hssfCell == null) {
continue;
}
hssfCell.setCellType(Cell.CELL_TYPE_STRING);
int cIndex =hssfCell.getColumnIndex();
if(hssfCell.getStringCellValue().equals("")){
rowMap.put(cIndex,"");
}else{
rowMap.put(cIndex, hssfCell.getStringCellValue());
}
}
resultList.add(rowMap);
}
}
return resultList;
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-325337-1-1.html 上篇帖子: Apache Mina: StreamIoHandler传输文件处理 下篇帖子: org.apache.mina.core.buffer包
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表