一、说明
1、文章转载自:http://blog.csdn.net/onepersontz/article/details/49891405
原文标题====SpringMvc+POI 处理Excel的导入操作功能====
提到了ImportExcelUtil.java(Excel解析工具类)、UploadExcelControl.java (Spring控制器)、InfoVo.java(保存Excel数据对应的对象)、main.jsp(前端代码)以及配置文件web.xml、springmvc-servlet.xml(只做简单配置)、applicationContext-base.xml等。
2、本文只提Controller层、ImportExcelUtil工具类两部分,原文中这两部分导入功能可能会有一些小问题,具体可看原文网友评论。
3、我对原文导入部分代码进行略微修改后,导入功能已实际运用当中,没发现问题。
二、功能代码
首先先感谢下原文博主,然后上代码!!!!!
1、Controller层
// 单号信息service
@Autowired
public OrderService orderService ; //服务层改为自己的
/**
* 一键上传Excel表信息
*
* @author Justin
*
*/
@RequestMapping("order_add.action")
public @ResponseBody List<String> uploadadd(MultipartFile myFile, HttpServletResponse res) throws IOException {
List<String> errorList = new ArrayList<String>();
try {
ImportExcelUtil util = new ImportExcelUtil();
InputStream input = null;
List<List<Object>> lists = null;
if(myFile.isEmpty()) {
log.error("文件不存在!");
}else {
if (errorList.size() == 0) {
String fileName = myFile.getOriginalFilename();
input = myFile.getInputStream();
lists = util.getBankListByExcel(input, fileName);
input.close();
//循环将excel中的数据存入库
for(int i=1; i<lists.size(); i++) {
List<Object> list = lists.get(i);
Order order= new Order(); //实体类,改为自己的
order.setOrderNumber(util.getFormat(String.valueOf(list.get(0))));
order.setAddress(util.getFormat(String.valueOf(list.get(1))));
order.setPhone(util.getFormat(String.valueOf(list.get(2))));
orderService.add(order);
}
}
}
} catch (Exception e) {
errorList.add("导入单号数据错误");
e.printStackTrace();
log.error("系统错误", e.fillInStackTrace());
}
return errorList;
}
2、ImportExcelUtil工具类
package poi;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ImportExcel {
private final static String Excel_2003 =".xls";//2003版本的excel
private final static String Excel_2007 =".xlsx";//2007版本的excel
public List<List<Object>> getBankListByExcel(InputStream in,String fileName) throws Exception{
List<List<Object>> list = null;
//得到一个Excel工作薄
Workbook work = this.getWorkbook(in, fileName);
if(work==null) {
throw new Exception("Excel工作薄为空");
}
Sheet sheet = null;
Row row = null;
Cell cell = null;
list = new ArrayList<List<Object>>();
//遍历Excel中所有的sheet
for(int i=0;i<work.getNumberOfSheets();i++) {
//获得Excel中sheet工作表单
sheet = work.getSheetAt(i);
if(sheet==null) {continue;}
//遍历当前sheet中所有的行
//int total = sheet.getPhysicalNumberOfRows();//如果excel有格式,这种方式取值不准确
int totalRow = sheet.getLastRowNum();
for(int j=sheet.getFirstRowNum();j<totalRow;j++) {
//获取一行
row = sheet.getRow(j);
if(row!=null && !"".equals(row)) {
//获取第一个单元格的数据,判断是否存在
Cell firstCell = row.getCell(0);
if(firstCell!=null) {
//遍历一行中每一列
List<Object> li = new ArrayList<Object>();
//int totalColumn = row.getLastCellNum();
for(int y=row.getFirstCellNum();y<row.getLastCellNum();y++) {
//获取每一格
cell = row.getCell(y);
String cellCal = this.getCellValue(cell)+"";
li.add(cellCal);
}
list.add(li);
}
}
}
}
in.close();
return list;
}
public Workbook getWorkbook(InputStream in,String fileName) throws Exception {
Workbook work = null;
//获取文件类型xls或者xlsx
String fileType = fileName.substring(fileName.lastIndexOf("."));
if(Excel_2003.equals(fileType)) {
work = new HSSFWorkbook(in);//2003 版本的Excel
}else if(Excel_2007.equals(fileType)) {
work = new XSSFWorkbook(in);
}else {
throw new Exception("解析文件格式有误");
}
return work;
}
/**
* 对表格中的数据进行格式化
* @param cell
* @return
*/
public Object getCellValue(Cell cell) {
Object value = null;
DecimalFormat df1 = new DecimalFormat("0");//格式化number,string 字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//日期格式化
DecimalFormat df2 = new DecimalFormat("0.00");//格式化数字
if(cell!=null && !"".equals(cell)) {
switch(cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
value = cell.getRichStringCellValue().getString();
break;
case Cell.CELL_TYPE_NUMERIC:
if("General".equals(cell.getCellStyle().getDataFormatString())) {
value = df1.format(cell.getNumericCellValue());
}else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())) {
value = sdf.format(cell.getDateCellValue());
}else if(HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
value = sdf.format(date);
}else {
value = df2.format(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BOOLEAN:
value = cell.getBooleanCellValue();
break;
case Cell.CELL_TYPE_BLANK:
value="";
break;
default:
break;
}
}
return value;
}
}