这里解析excel文件用了第三方所提供的一些类库。Jakarta的POI项目提供了一组操纵Windows文档的Java API,如下几个类提供了操作Excel文
件的方便的途径:HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell,分别代表了Excel电子表格中的Book、Sheet、行和单元格。你可以在下面地址下载到最新的POI工具包:
http://jakarta.apache.org/poi/index.html
一些常用操作如下:
//
所导入的第三方类包
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;
// 初始化
POIFSFileSystem poiFs = new POIFSFileSystem(inputStream);
HSSFWorkbook wb = new HSSFWorkbook(poiFs);
HSSFSheet sheet = wb.getSheetAt( 0 );
int rowNumber = sheet.getFirstRowNum();
int lastRowNumber = sheet.getLastRowNum();
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;
// 初始化
POIFSFileSystem poiFs = new POIFSFileSystem(inputStream);
HSSFWorkbook wb = new HSSFWorkbook(poiFs);
HSSFSheet sheet = wb.getSheetAt( 0 );
int rowNumber = sheet.getFirstRowNum();
int lastRowNumber = sheet.getLastRowNum();
通过sheet.getRow(rowNumber)取得一行的数据。
对每一行HSSFRow,它可以通过getFirstCellNum(cellNum) or getLastCellNum(cellNum)取得此行的格数(列数)。
通过HSSFCell可以判断每个表格中的数据类型,DOC中描述如下:
static
int
CELL_TYPE_BLANK
Blank Cell type ( 3 )
static int CELL_TYPE_BOOLEAN
Boolean Cell type ( 4 )
static int CELL_TYPE_ERROR
Error Cell type ( 5 )
static int CELL_TYPE_FORMULA
Formula Cell type ( 2 )
static int CELL_TYPE_NUMERIC
Numeric Cell type ( 0 )
static int CELL_TYPE_STRING
String Cell type ( 1 )
Blank Cell type ( 3 )
static int CELL_TYPE_BOOLEAN
Boolean Cell type ( 4 )
static int CELL_TYPE_ERROR
Error Cell type ( 5 )
static int CELL_TYPE_FORMULA
Formula Cell type ( 2 )
static int CELL_TYPE_NUMERIC
Numeric Cell type ( 0 )
static int CELL_TYPE_STRING
String Cell type ( 1 )
这样,对于一个现有的excel文件,我们可以取得它所以行的数据,并对行中的每条数据根据不同的类型进行操作了!
将excel文件中的一行具体cell转换成java数据实例:
private
String getStringCellValue(HSSFCell cell,
boolean
dateFlag)
{
String value = null ;
if (cell == null )
return null ;
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_BOOLEAN:
value = String.valueOf(cell.getBooleanCellValue());
break ;
case HSSFCell.CELL_TYPE_NUMERIC:
if (dateFlag)
value = new java.text.SimpleDateFormat( " yyyy-MM-dd HH:mm " ).format(cell.getDateCellValue());
else {
// value=String.valueOf(cell.getNumericCellValue());
value = new DecimalFormat( " 0.########## " ).format(cell.getNumericCellValue());
}
break ;
case HSSFCell.CELL_TYPE_ERROR:
value = String.valueOf(cell.getErrorCellValue());
break ;
case HSSFCell.CELL_TYPE_FORMULA:
case HSSFCell.CELL_TYPE_BLANK:
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
if (DATE_CELL.equals(value))
dateCellNumber = cell.getCellNum();
break ;
}
return value;
}
String value = null ;
if (cell == null )
return null ;
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_BOOLEAN:
value = String.valueOf(cell.getBooleanCellValue());
break ;
case HSSFCell.CELL_TYPE_NUMERIC:
if (dateFlag)
value = new java.text.SimpleDateFormat( " yyyy-MM-dd HH:mm " ).format(cell.getDateCellValue());
else {
// value=String.valueOf(cell.getNumericCellValue());
value = new DecimalFormat( " 0.########## " ).format(cell.getNumericCellValue());
}
break ;
case HSSFCell.CELL_TYPE_ERROR:
value = String.valueOf(cell.getErrorCellValue());
break ;
case HSSFCell.CELL_TYPE_FORMULA:
case HSSFCell.CELL_TYPE_BLANK:
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
if (DATE_CELL.equals(value))
dateCellNumber = cell.getCellNum();
break ;
}
return value;
}
到了现在实中应用当然不会这么简单,此类库的更多功能我们可以参考其API,在此将中附带了API。