您的位置:首页 > 编程语言 > Java开发

JAVA简单读取xls表格

2016-05-20 22:17 525 查看
因为在学习的时候看了一位大神的源码,全部是英文的,因为有部分是JXLS的源码,但是不算是特别难懂,于是尝试着用英文来写代码,包括注释。当然我觉得自己写的英文也很好懂,也就英语2级的水平,哈哈,大家别看到英语就怕了,仔细读读,其实很好理解的。



实现过程其实也很简单,把它想成我们的可视化过程:

1、创建一个工作簿:

//create a new workbook

HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

2、遍历这个工作簿,看看有哪些sheet:

for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++)

 {

/*
* if there are sheets,there will be return a HSSFSheet instance
* even through it has noting ,but the HSSFSheet instance has 0 rows;
*/
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);

if (hssfSheet == null || hssfSheet.getLastRowNum()==0) 
{
continue;
}

//接着就是第3步:看看这个sheet有多少行,我们一行一行的遍历

// Read the Rows
//getLastRowNum():the return value less 1 than the true number of the rows,so use <= not,like operate array normally
for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {

HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if (hssfRow != null) {

//each row will be put into rowList
List<String> rowList = new ArrayList<String>();
//接着就是第4步:看看这一行有多少列,我们对这行一列一列的遍历
//getLastCellNum():the return value more 1 than the true number of the cells,so use < not <=,note that!
for(int cellNum = 0; cellNum<hssfRow.getLastCellNum();cellNum++)
{
rowList.add(getCellValue(hssfRow.getCell(cellNum),evaluator));
}
returnList.add(rowList);
}
}

}
return returnList;

}

//我们需要用到一个函数,它可以帮我们解决取值的问题,甚至可以计算公式的值(这部分在工程源码中有,此处就不再展开了):

/**

* @param hssfCell
* @param evaluator if the hssfCell's cellType is CELL_TYPE_FORMULA,
* there need a FormulaEvaluator instance to evaluate the value。
* <a href='http://poi.apache.org/spreadsheet/eval.html'>how to use FormulaEvaluator</a>
* @return
*/
private String getCellValue(org.apache.poi.ss.usermodel.Cell hssfCell, 
org.apache.poi.ss.usermodel.FormulaEvaluator evaluator)
{
if(hssfCell==null )
return null;
if (hssfCell.getCellType() == Cell.CELL_TYPE_NUMERIC)
return String.valueOf(hssfCell.getNumericCellValue());
else if(hssfCell.getCellType() == Cell.CELL_TYPE_FORMULA)
{
CellValue  cellValue  = evaluator.evaluate(hssfCell);
return cellValue.formatAsString();
}
else if (hssfCell.getCellType() == Cell.CELL_TYPE_BOOLEAN)
return String.valueOf(hssfCell.getBooleanCellValue());
else if(hssfCell.getCellType() == Cell.CELL_TYPE_ERROR)
return String.valueOf(hssfCell.getErrorCellValue());
else
return String.valueOf(hssfCell.getStringCellValue());
}

最后还是把所需要的JXLS包工程源代码再一次的放出来,以免大家没看到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java xls jxls poi