1、poi帮助文档:
API:http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html
poi包:http://pan.baidu.com/s/1hmIQU
2、小知识点
1.sheet, 以0开始,以workbook.getNumberOfSheets()-1结束
2.row, 以0开始(getFirstRowNum),以getLastRowNum结束
3.cell, 以0开始(getFirstCellNum),以getLastCellNum结束
3、例子:
excel内容的值如果不是string,则用getNumericCellValue(),得到double类型,再做相应转换,如果为string,则用getStringCellValue()
double转换为int:int i_yhfw= (int) Double.parseDouble(Demo.getExcel(index, 13));
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
/**
* 获取excel文件
* index为sheet页,从0开始
* rowNum为行数,从0开始
* 从来colNumNum为列数,从0开始
* 只能读取excel2003(2003的后缀名是.xls)
*/
public static String getExcel(int index,int rowNum,int colNum){
//String Divpath="C:/Users/gmsd11/workspace";//文件保存的路径
//File dirFile=new File(Divpath);//创建文件对象
//if(!dirFile.exists()){//如果文件路径不存在,自动创建目录
//dirFile.mkdir();
//}
//System.out.println(dirFile.getAbsolutePath());
String path="C:/Users/gmsd11/workspace/testdate1.xls";//文件路径
File file=new File(path);//创建文件对象
System.out.println(file.getAbsolutePath());
String cellValue=null;//保存读取出的列值
int rowN=rowNum-1;//将excel的行数-1
Row row=null;//行对象(接口)
Cell cell=null;//列对象(接口)
HSSFCell hssfcell=null;//该类实现了以上Cell接口
try {
FileInputStream in=new FileInputStream(file);//通过打开一个到实际文件的连接来创建一个FileInputStream对象,该文件通过文件系统的File对象file制指定(创建文件流)
HSSFWorkbook wb=new HSSFWorkbook(in);//创建一个Excel对象
HSSFSheet sheet=wb.getSheetAt(index);//创建一个Excel的sheet,sheet页,index从0开始(创建表格)
//从哪行读取
//int firstRowNum=sheet.getFirstRowNum()+1;
//int loatRowNum=sheet.getLastRowNum();
row=sheet.getRow(rowN);//取得行
hssfcell=(HSSFCell)row.getCell(colNum);//取得行的第3列(获得单元格),从0开始
if(hssfcell!=null){
//((Object) hf).setEncoding(HSSFCell.ENCODING_UTF_16);
//判断excel内容的数值类型
switch (hssfcell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING://字符串
cellValue=hssfcell.getStringCellValue().trim();
break;
case HSSFCell.CELL_TYPE_NUMERIC://数值型
if(HSSFDateUtil.isCellDateFormatted(cell)){
//如果是date类型则,获取该hssfcell的date值
Date date=hssfcell.getDateCellValue();
if(date!=null){
cellValue=new SimpleDateFormat("yyyy-MM-dd").format(date);//创建一个日期格式并以格式处理日期
}else{
cellValue="";
}
}else {//纯数字
cellValue=new DecimalFormat("###.###").format(hssfcell.getNumericCellValue());//格式化十进制数字
//cellValue = String.valueOf(cell.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_FORMULA://公式类型
//导入时如果为公式生成的数据则无值
if(!hssfcell.getStringCellValue().endsWith("")){
cellValue=hssfcell.getStringCellValue();
}else{
cellValue=hssfcell.getNumericCellValue()+"";
}
// //读公式计算值
// value = String.valueOf(cell.getNumericCellValue());
// if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
// value = cell.getStringCellValue().toString();
// }
// break;
break;
case HSSFCell.CELL_TYPE_BLANK://空值
cellValue="";
System.out.println("excel出现空值");
break;
case HSSFCell.CELL_TYPE_ERROR://故障
cellValue="";
System.out.println("excel出现故障");
break;
case HSSFCell.CELL_TYPE_BOOLEAN://布尔类型
cellValue=(hssfcell.getBooleanCellValue()==true ? "Y" : "N" );
break;
default:
cellValue="";
break;
}
}else{
cellValue="";
}
in.close();//关闭流
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return cellValue;
}
4、excel类型问题,获得数据(网站转载)
//解决excel类型问题,获得数值
public String getValue(Cell cell) {
String value = "";
if(null==cell){
return value;
}
switch (cell.getCellType()) {
//数值型
case Cell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
//如果是date类型则 ,获取该cell的date值
Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
value = format.format(date);;
}else {// 纯数字
BigDecimal big=new BigDecimal(cell.getNumericCellValue());
value = big.toString();
//解决1234.0 去掉后面的.0
if(null!=value&&!"".equals(value.trim())){
String[] item = value.split("[.]");
if(1
value=item[0];
}
}
}
break;
//字符串类型
case Cell.CELL_TYPE_STRING:
value = cell.getStringCellValue().toString();
break;
// 公式类型
case Cell.CELL_TYPE_FORMULA:
//读公式计算值
value = String.valueOf(cell.getNumericCellValue());
if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
value = cell.getStringCellValue().toString();
}
break;
// 布尔类型
case Cell.CELL_TYPE_BOOLEAN:
value = " "+ cell.getBooleanCellValue();
break;
// 空值
case Cell.CELL_TYPE_BLANK:
value = "";
LogUtil.getLogger().error("excel出现空值");
break;
// 故障
case Cell.CELL_TYPE_ERROR:
value = "";
LogUtil.getLogger().error("excel出现故障");
break;
default:
value = cell.getStringCellValue().toString();
}
if("null".endsWith(value.trim())){
value="";
}
return value;
}