编写页面form表单(注意要使用enctype="multipart/form-data")
<form action="improtClassData.do?method=classInfoImpl" method="post" enctype="multipart/form-data">
<input type="file" name="classFile"/>
<input type="submit" class="btn" value="导入"/>
</form>
action接收到后做如下操作:
从formbean中得到文件
把文件存放本地,包括声明输入流读取文件,创建本地文件,声明输出流,把读到的输入流用输出流写入本地文件
然后使用poi包里面提供的api获取保存的本地xls里面的内容
1、声明并得到本地xls的输入流
InputStream is = new FileInputStream(filepath);
2、声明一个HSSFWorkbook对象‘
HSSFWorkbook wb = new HSSFWorkbook(is);
3、获取xls的第一页(声明操作对象)
HSSFSheet sheet = wb.getSheetAt(0);
4、获取xls第一页的行数,并遍历每一行,每一行都得到HSSFRow对象,代表xls的这一行
HSSFRow row = sheet.getRow(r);
6、用下标索引得到每一行的索引列的单元,注意此处需要判断类型并转换成基本类型或String
getCellStringValue(row.getCell(0));//传入,判断值类型并获取实际值
public String getCellStringValue(HSSFCell cell) {
String cellValue = "";
if (cell != null)
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
cellValue = cell.getStringCellValue();
if (cellValue.trim().equals("")
|| cellValue.trim().length() <= 0)
cellValue = " ";
break;
case HSSFCell.CELL_TYPE_NUMERIC:
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
cellValue = " ";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
return cellValue;
}
遇到过的问题:
读取xls文件时出现过,那文件曾经删除过数据,但是貌似还存在一些格式,导致读到了这些空白行,但是又没有数据,最后抛异常,在读取时要先做判断
获取模板中提前设置的公式:
cell=row.getCell(c); if (HSSFCell.CELL_TYPE_FORMULA == cell.getCellType()) { //取得公式单元格的公式,重新设置 cell.setCellFormula(cell.getCellFormula()); }