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<item.length&&"0".equals(item[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; }