java中用poi处理Excel表格之读取

http://tool.oschina.net/apidocs/apidoc?api=apache-POI

处理excel可以用jxl.jar和 aphace的poi
jxl.jar停止更新了,只能用其处理2003格式 Excel
aphace的poi,可以处理2003和2007

public static List<String[]> readExcel(File file) throws IOException{
//取文件名
String filename = file.getName();
//取文件后缀
String subfix = filename.lastIndexOf(".")==-1? "" : filename.substring(filename.lastIndexOf(".")+1);
System.out.println(subfix);
//获取读取的数据
List<String[]> result = new ArrayList<String[]>();
if(subfix.equals("xls")){
result = readExcel2003(file);
}else if(subfix.equals("xlsx")){
result = readExcel2007(file);
System.out.println(result);
}else{
throw new IOException("文件格式不正确");
}
return result;
}


private static List<String[]> readExcel2007(File file) throws IOException {
//存放获取的数据
List<String[]> result = new ArrayList<String[]>();
//创建一个输入流
FileInputStream in= new FileInputStream(file);
//创建一个Excel操作对象
XSSFWorkbook workbook = new XSSFWorkbook(in);
//行大小
int rowSize = 0 ;
//工作簿个数
int sheets = workbook.getNumberOfSheets();
//工作簿对象
XSSFSheet sheet;
//工作簿中的行
XSSFRow row;
//行中的单元格
XSSFCell cell;
//循环工作簿
for(int st=0 ; st<sheets ; st++){
//获得对应的工作簿
sheet = workbook.getSheetAt(st);
//工作簿中的行数
int rowNum = sheet.getLastRowNum();
//循环行
for(int rowIndex = 1; rowIndex <=rowNum ; rowIndex++){
row = sheet.getRow(rowIndex);
if(row == null){
continue;
}
//当前行列数
int tempRowSize = row.getLastCellNum();
//始终让rowSize为最大列数
if(tempRowSize > rowSize){
rowSize = tempRowSize;
}
//单元格数据暂存
String[] values = new String[rowSize];
//标识行中是否有数据
boolean hasValue = false;
//该行中列数
int cols = row.getLastCellNum();
for(int col = 0; col < cols; col++){
//暂存党员个数据
String value = "";
//单元格
cell = row.getCell(col);
//如果为空继续下一个单元格
if(cell == null){
continue;
}
//获得对应单元格中对应格式 的数据
value = getFormatValue2007(cell);
System.out.print(value+"\t");
values[col] = value;
hasValue = true;
}
System.out.println();
//如果有值加入到result
if(hasValue){
result.add(values);
}
}
}
return result;
}


public static String getFormatValue2007(XSSFCell cell){

//暂存单元格内容
String value = "";
//匹配单元格内容
switch (cell.getCellType()) {
//数据格式类型
case XSSFCell.CELL_TYPE_NUMERIC:
//判断是否是日期类型
if(HSSFDateUtil.isCellDateFormatted(cell)){
Date date = cell.getDateCellValue();
if(date!=null){
//格式化日期
value = new SimpleDateFormat("yyyy-mm-dd").format(date);
}else{
value = "";
}
}else{
//格式化数据
value =new DecimalFormat("0").format(cell.getNumericCellValue());
}
break;
//字符串类型
case XSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
//公式生成类型
case XSSFCell.CELL_TYPE_FORMULA:
//导入时如果为公式生成的数据则无值
if(!cell.getStringCellValue().equals("")){
value = cell.getStringCellValue();
}else{
value = cell.getNumericCellValue()+"";
}
break;
//空白
case XSSFCell.CELL_TYPE_BLANK:
value = "";
break;
//布尔型
case XSSFCell.CELL_TYPE_BOOLEAN:
value = cell.getBooleanCellValue()+"";
break;
//错误格式
case XSSFCell.CELL_TYPE_ERROR:
value = "";
break;
default:
value = cell.toString();
}
return value;
}

private static List<String[]> readExcel2003(File file) throws IOException {
//存放获取的数据
List<String[]> result = new ArrayList<String[]>();
//创建一个输入流
FileInputStream in = new FileInputStream(file);
//创建对Excel操作的对象
HSSFWorkbook workbook = new HSSFWorkbook(in);
//行大小
int rowSize = 0;
//工作簿的个数
int sheets = workbook.getNumberOfSheets();
//工作簿对象
HSSFSheet sheet;
//行
HSSFRow row;
//单元格
HSSFCell cell;
//对每个工作簿进行循环
for(int i = 0 ;i < sheets ; i++){
//获得工作簿
sheet = workbook.getSheetAt(i);
//工作簿中的行数
int rowNum = sheet.getLastRowNum();
for(int rowIndex = 1 ; rowIndex <= rowNum ; rowIndex++){
row = sheet.getRow(rowIndex);
if(row==null){
continue;
}
//获取当前行的列数
int tempRowSize = row.getLastCellNum();
//总是最大列数
if(tempRowSize > rowSize){
rowSize = tempRowSize;
}
//获得单元格的内容暂存
String[] values = new String[rowSize];
//标识Excel中是否有数据
boolean hasValue = false;
//该行中列数
int cols = row.getLastCellNum();
//循环对列取值
for(int col = 0 ;col < cols ; col++){
//单元格暂存
String value = "";
//获得单元格
cell = row.getCell(col);
//如果为空继续下一个单元格
if(cell == null){
continue;
}
//获得对应单元格中的格式化数据
value = getFormatValue2003(cell);
System.out.print(value+"\t");
values[col] = value;
hasValue = true;
}
System.out.println();
//有内容则加入到result中
if(hasValue){
result.add(values);
}
}
}
return result;
}


public static String getFormatValue2003(HSSFCell cell){

//暂存单元格内容
String value = "";
//匹配单元格内容
switch (cell.getCellType()) {
//数据格式类型
case XSSFCell.CELL_TYPE_NUMERIC:
//判断是否是日期类型
if(HSSFDateUtil.isCellDateFormatted(cell)){
Date date = cell.getDateCellValue();
if(date!=null){
//格式化日期
value = new SimpleDateFormat("yyyy-mm-dd").format(date);
}else{
value = "";
}
}else{
//格式化数据
value =new DecimalFormat("0").format(cell.getNumericCellValue());
}
break;
//字符串类型
case XSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
//公式生成类型
case XSSFCell.CELL_TYPE_FORMULA:
//导入时如果为公式生成的数据则无值
if(!cell.getStringCellValue().equals("")){
value = cell.getStringCellValue();
}else{
value = cell.getNumericCellValue()+"";
}
break;
//空白
case XSSFCell.CELL_TYPE_BLANK:
value = "";
break;
//布尔型
case XSSFCell.CELL_TYPE_BOOLEAN:
value = cell.getBooleanCellValue()+"";
break;
//错误格式
case XSSFCell.CELL_TYPE_ERROR:
value = "";
break;
default:
value = cell.toString();
}
return value;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值