最近用了一下读取XLS文件的中间件POI,简单在网络上找了一些资料发现非常多,加上我自己的应用这里总结一下者:文虹,欢迎来到我的博客http://winnernoom.iteye.com/
poi,与jxl一样都可以实现java操作excel文件
HSSF对Excel的操作主要是通过下面几个对象实现:
HSSFWorkbook 工作簿对象对应于Excel文件
HSSFSheet Sheet对象对应于Excel中的Sheet
HSSFRow 行对象表示Sheet中的一行(这个对象在JXL中并没有提供)
HSSFCell 单元格对象
基本步骤:
通过Poi操作Excel十分方便,将一个Excel抽象为一个Workbook,一个表单页抽象为Sheet,表单中的一行抽象为Row,一行中的一个单元格可以抽象为Cell。HSSF对应的是97-03格式(.xls),XSSF对应的是07格式的(.xlsx)。
Workbook的获取有以下几种方式:
1.可以通过WorkbookFactory,工厂方法
Workbook wb=WorkbookFactory.create(new FileInputStream(file));//可以读取xls格式或xlsx格式。
2.直接通过HSSFWorkbook或XSSFWorkbook的构造方法
Workbook wb=new HSSFWorkbook();//生成一个空的Excel文件
Workbook wb=new HSSFWorkbook(new FileInputStream(file));//读取一个已经存在的Excel文件
Sheet可由Workbook创建和得到
Sheet s=wb.createSheet(sheet);//创建一个名为sheet的表单
HSSFSheet sheet = wb.getSheetAt(0);//得到第一个seet表单,也可以通过表单名字得到
Row由Sheet创建和得到
Row r=s.createRow(row);//新创建一行,行号为row+1
HSSFRow row = sheet.getRow(n);//得到一行,从0开始
Cell有Row创建和得到
Cell c=r.createCell(col);//创建一个单元格,列号为col+1
row.getCell(n)// 得到一个单元格,从0开始
最后就可以通过c.setCellValue(value)向单元格填充内容即可
单元格可以是各种类型,类型如下
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)
例子:如下代码是得到指定的XLS文件中第一个sheet的第一个列数据,要求数据类型是文本类型。
public List<String> readExcel(String path) throws Exception {
List<String> list = new ArrayList<String>();
try {
FileInputStream fis = new FileInputStream(path);
HSSFWorkbook wb = new HSSFWorkbook(fis);
// int sheetCount = wb.getNumberOfSheets();//得到有个sheet
HSSFSheet sheet = wb.getSheetAt(0);//得到一个sheet
for (int i = 0; i < sheet.getLastRowNum(); i++) {
HSSFRow row = sheet.getRow(i);
if(row.getCell(0).getCellType()==1){//表示文本类型
list.add(row.getCell(0).getRichStringCellValue().toString());
}else if(row.getCell(0).getCellType()!=3){
throw new Exception("电子表格中存储的不是文本格式,请修改电子表格中的格式");
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
作者:文虹,欢迎来到我的博客http://winnernoom.iteye.com/