POI 读取 Excel 文件
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFCell;
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.poifs.filesystem.POIFSFileSystem; public class ReadExcel {
private POIFSFileSystem pois ;
private HSSFWorkbook workBook;
private HSSFSheet sheet;
private HSSFRow row;
private HSSFCell cell;
List<String> RegionList = new ArrayList<String>();
Map<String, String> unitMap = new HashMap<String, String>(); //存放集合 <region,unit>1:1
Map<String, List<String>> deptMap = new HashMap<String, List<String>>(); //存放集合 <unit,dept>1:n
/**
* sheetName
* @param os
* @param sheetCount
* @return
* @throws Exception
*/
public List readExcelSheetName(InputStream os,int sheetCount) throws Exception{
pois = new POIFSFileSystem(os);
workBook = new HSSFWorkbook(pois);
for(int i=;i<sheetCount;i++){
sheet = workBook.getSheetAt(i);
String sheetName = sheet.getSheetName();
// System.out.println("sheetName:"+sheetName);
RegionList.add(sheetName);
List plist = readCell(sheet,sheetName);
File f = new File("F://person.txt");
OutputStream osa = new FileOutputStream(f);
System.out.println(plist.size() + " 总数");
for(int j = ;j<plist.size();j++){
Person per = (Person) plist.get(j);
StringBuffer sb = new StringBuffer();
sb.append("region:"+per.getCity()+" "+"unit:"+per.getUnit()+" "+"dept:"+per.getDept()+" "+"name:"+per.getName());
sb.append(" "+"tel:"+per.getTel()+" "+"phone:"+per.getPhone());
sb.append("\r\n");
osa.write(sb.toString().getBytes());
}
osa.close();
}
return RegionList;
} /**
* 一个sheet上的相关信心
* @param sheet
* @return
*/
public List readCell(HSSFSheet sheet,String sheetName){
List Personlist = new ArrayList();
String dept = "";
String unit = "";
int rowcount = ;
for (Iterator iterator = sheet.iterator(); iterator.hasNext();) {
Person person = new Person();
HSSFRow rows = (HSSFRow) iterator.next(); //获得每个sheet的行数
if(rowcount == ){ //有特殊的特殊处理,第一行标题
cell = rows.getCell();
String title = cell.getStringCellValue();
// System.out.println("一标题:"+title.trim());
}else if(rowcount == ){ //第二行,单位名称
cell = rows.getCell();
String unitCell = cell.getStringCellValue();
unit = unitCell.replace("单位名称:", "");
unitMap.put(sheetName, unit);//
}else{
for(int i = ;i<rows.getPhysicalNumberOfCells();i++){ //获得每行的cell个数
cell = rows.getCell(i);
if(rowcount == ){ //第三行标题栏
// switch (i){
// case 1 :
// String b1 = cell.getStringCellValue();
// System.out.println("三标题:"+b1);
// break;
// case 2 :
// String b2 = cell.getStringCellValue();
// System.out.println("三标题:"+b2);
// break;
// case 3:
// String b3 = cell.getStringCellValue();
// System.out.println("三标题:"+b3);
// break;
// case 4:
// String b4 = cell.getStringCellValue();
// System.out.println("三标题:"+b4);
// break;
// }
}else{
if(cell != null){
if(i == && formateCell(cell) != null&& !"".equals(formateCell(cell).trim())){ //第一个单元格有合并的部分
System.out.println(cell.getCellType()+"+++++"+cell.getStringCellValue().trim());
dept = cell.getStringCellValue();
dept = dept.replaceAll("\n", "").replace(" ","");
List deplist = deptMap.get("unit");
if(deplist == null ){
deplist = new ArrayList<String>();
deplist.add(dept);
}
deptMap.put(unit, deplist);
}else{
switch (i){
case :
String b1 = cell.getStringCellValue();
person.setName(b1);
break;
case :
String b2 = cell.getStringCellValue();
person.setPosition(b2);
break;
case :
//System.out.println("-------"+cell.getCellType());
double b3 =cell.getNumericCellValue(); //默认的cell类型:0:double,1:string
person.setTel(formatDouble(b3+""));
break;
case :
double b4 = cell.getNumericCellValue();
person.setPhone(formatDouble(b4+""));
break;
}
}
}
}
}
person.setCity(sheetName);
person.setDept(dept);
person.setUnit(unit);
if(rowcount != ){
Personlist.add(person);
}
}
rowcount ++;
}
return Personlist;
} /**
* 格式化cell里面的内容
* @param cell
* @return
*/
private String formateCell(HSSFCell cell){
String strCell = "";
switch (cell.getCellType()){
case HSSFCell.CELL_TYPE_STRING:
strCell = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
strCell = formatDouble(String.valueOf(cell.getNumericCellValue()));
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
strCell = String.valueOf(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
strCell = "";
break;
default:
strCell = "";
break;
}
if (strCell.equals("") || strCell == null) {
return "";
}
if (cell == null) {
return "";
}
return strCell;
} private String formatDouble(String str) {
if (str == null || "".equals(str.trim()))
return "";
if (str.indexOf(".") > ) {
if (str.indexOf("E") > ) {
str = str.substring(, str.indexOf("E")).replace(".", "");
} else {
str = str.substring(, str.indexOf("."));
}
}
return str;
} }
所需jar
官网下载最新jar : http://poi.apache.org/
POI 读取 Excel 文件的更多相关文章
- JAVA使用POI读取EXCEL文件的简单model
一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- 使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10
使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10 [问题点数:40分,结帖人xieyongqiu] 不显示删除回复 ...
- 使用jxl,poi读取excel文件
作用:在java后台添加一个方法,读取导入的excel内容,根据需要返回相应的sql语句,以完成对临时表的插入操作. 使用jxl读取excel文件 package com.sixthf.bi.sapp ...
- 使用POI读取excel文件内容
1.前言 项目中要求读取excel文件内容,并将其转化为xml格式.常见读取excel文档一般使用POI和JExcelAPI这两个工具.这里我们介绍使用POI实现读取excel文档. 2.代码实例: ...
- jspsmart(保存文件)+poi(读取excel文件)操作excel文件
写在前面: 项目环境:jdk1.4+weblogic 需求:能上传excel2003+2007 由于项目不仅需要上传excel2003,还要上传excel2007,故我们抛弃了jxl(只能上传exce ...
- Java实现POI读取Excel文件,兼容后缀名xls和xlsx
1.引入所需的jar包: maven管理项目的话直接添加以下坐标即可: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -- ...
- 使用poi读取excel文件 Cannot get a text value from a numeric cell
我这样转换得到一个excel文本域的值 Cell cell = row.getCell(c); cell.setCellType(Cell.CELL_TYPE_STRING); String park ...
- spring boot 使用 POI 读取Excel文件
内容简介 本文主要介绍使用POI进行Excel文件的相关操作,涉及读取文件,获取sheet表格,对单元格内容进行读写操作,以及合并单元格的操作. Excel文件目录 Excel模板文件存了resour ...
- POI读取excel文件。
1) poi读取现成.xls文件,不需要自己建立.xls ====ReadExcel类==== package cust.com.excelToDataTest; import java.io.F ...
随机推荐
- 萌新笔记之堆(heap)
前言(萌新感想): 以前用STL的queue啊stack啊priority_queue啊,一直很想懂原理,现在终于课上到了priority_queue,还有就是下周期中考,哈哈,所以写几篇blog总结 ...
- 51nod 1021【区间DP】
思路: dp[ i ] [ j ]代表取[ i ,j ]区间石子的最小值,然后dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]); # ...
- [Xcode 实际操作]二、视图与手势-(5)给图像视图添加圆角效果
目录:[Swift]Xcode实际操作 本文将演示给矩形图片添加圆角效果 import UIKit class ViewController: UIViewController { override ...
- MySQL中group by 与 order by 一起使用排序问题
假设有一个表:reward(奖励表),表结构如下: CREATE TABLE test.reward ( id ) NOT NULL AUTO_INCREMENT, uid ) NOT NULL CO ...
- JPA_day01
- Linux —— 压缩命令
压缩与解压命令 .zip格式 压缩文件: zip 压缩文件名 原文件名 (压缩目录添加 -r) 解压缩文件/目录: unzip .zip压缩包 .gz格式 压缩文件: gzip 原文件名称 压缩文件为 ...
- 【loj10064】黑暗城堡
#10064. 「一本通 3.1 例 1」黑暗城堡 内存限制:512 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: 1bentong 提交 ...
- Gym - 101810F ACM International Collegiate Programming Contest (2018)
bryce1010模板 http://codeforces.com/gym/101810 #include<bits/stdc++.h> using namespace std; #def ...
- python学习之字符编码
字符串涉及到编码:ascii gbk gb2312 unicode uft-8 对于英文字符ASCII(可以看成utf-8的子集)就可以了,中文用gbk/gb2312; unicode:世界统一(兼容 ...
- Centos7中查看IP命令:IP addr
Centos的IP地址是网卡的inet 的值,很明显第一个是本地服务地址,不是我们想要的.第二个没有inet这个属性值. 接下来配置网卡,我的网卡是上图黄色方框中第一行开始的那一部分:eno16777 ...